2

これはテキストのサンプルです:

$text = "asd dasjfd fdsfsd http://11111.com/asdasd/?s=423%423%2F gfsdf http://22222.com/asdasd/?s=423%423%2F
asdfggasd http://3333333.com/asdasd/?s=423%423%2F";

これは私の正規表現パターンです:

preg_match_all( "#http:\/\/(.*?)[\s|\n]#is", $text, $m );

これは最初の 2 つの URL と一致しますが、最後の URL と一致させるにはどうすればよいですか? [\s|\n|$] を追加しようとしましたが、これも最初の 2 つの URL にしか一致しません。

4

3 に答える 3

3

一致させようとしないでください\n(結局、改行はありません!) 代わりに$(文字列の末尾に一致します) を使用してください。

編集:最初のアイデアがうまくいかない理由を知りたいので、知っている場合はお知らせください. []行末が1文字ではないのに、1文字に一致させようとするからだと思いますか?:)

これは機能します:

preg_match_all('#http://(\S+)#is', $text, $m);

/ は区切り文字ではないためエスケープする必要はありませんが、\二重引用符を使用しているため (文字列が解析されるため) エスケープする必要があることに注意してください。代わりに、これには一重引用符を使用しました。

于 2012-06-17T18:22:38.330 に答える
0

文字列が有効なURLであるかどうかを確認するのに最適な正規表現は何ですか?を参照してください。

すべてのURLに一致する非常に長い正規表現がいくつかあります。

于 2012-06-17T22:50:15.940 に答える
0

私は PHP に詳しくないので、正確な構文はわかりませんが、試してみるとよいかもしれません。[] は文字クラスを意味するので、|$ は文字通り $ を探します。あなたが必要とするのは、次のようなものです。

#http:\/\/(.*)(?=(\s|$))

これがかなりずれている場合は申し訳ありませんが、別の角度から試すことができるかもしれません。

于 2012-06-17T18:26:06.893 に答える