2

PHPでpreg_replace()を使用してテキストを取得する際に問題が発生します。http | https|wwwで始まり最初の空白文字までのすべてのテキストを削除しようとしています。現在、preg_replace()の正規表現として(http | https | www)\S+を使用しています。ただし、コードを実行すると次のエラーが発生します。警告:preg_replace():不明な修飾子'\'これと同じ正規表現をテキストエディター(Sublime Text 2など)で問題なく使用できます。このエラーが発生する理由はありますか?正規表現で探しているテキストを取得する別の方法はありますか?

助けてくれてありがとう。

4

5 に答える 5

3

正規表現を区切る必要があります。通常はスラッシュ ( /) ですが、括弧のペアにすることもできます。2 番目の区切り文字の後に、複数の区切り文字を続けることができます (複数行の正規表現、空白を無視、大文字と小文字を区別しないなど)。\は有効な修飾子ではないため、PHP は文句を言います。

次のように正規表現を変更します。

preg_replace('/(http|https|www)\S+/', …, …);
于 2012-04-14T21:03:26.687 に答える
1

これを試して:

$string = preg_replace( '%(http|https|www).*?\s%', '', $string );
于 2012-04-14T21:05:53.340 に答える
0

正規表現の前に ^ を使用しない理由:

/^(http|http|www)/

これは、文字列の先頭でのみ一致します

于 2012-04-14T21:03:30.030 に答える
0

これは機能します: [デモ: http: //regexr.com?30l4d ]

$newstring = preg_replace( "/((https?|www).*?)\s/", "", $string);
于 2012-04-14T21:10:21.113 に答える
0

PHP で文字列をエスケープする方法に注意する必要があります。

たとえば、"\s"'\s'エスケープされた s であり、バックアッシュの後に s が続きます。

また、正規表現の最初と最後にスラッシュを追加することを忘れないでください。例えば:'/myregexp.*/'

于 2012-04-14T21:10:35.933 に答える