1

PHP 関数「preg_match_all」を使用して、文字列内の URL を一致させようとしています。疑問符が含まれる URL と一致しないことを除いて、正常に動作します。

たとえば、これはうまく一致します:

http://espn.com/mlb

しかし、これは一致しません:

http://espn.com/mlb?player=71

これが私が使用している正規表現です、

$regexUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

\S がクエスチョン マークを認識しない理由がわかりません。さまざまな表現を試しましたが、疑問符が一致しません。何か案は?

編集:

preg_match_all が true を返していることがわかりましたが、preg_match_all の出力で疑問符をエスケープしていなかったため、後で実行していた preg_replace 呼び出しが失敗していました。

4

1 に答える 1

5

疑問符は、前の一致がオプションであることを意味します。

/https?/

「http」と「https」の両方が一致します。疑問符を一致させるには、疑問符をエスケープする必要があります。

例えば:

/https\?/

"https?" のみに一致するようになりました。

于 2012-04-12T02:21:16.163 に答える