0

私はこの preg_replace を php に持っています。これは、「エクスプロイト」で始まるすべての単語をリンクにほぼ正しく置き換えます。

preg_replace('#[\b]?(exploit([^ ]*))[\b]?#', '<a>$1</a>', 'My exploits are exploitable.');

私はこれを得る:

My <a>exploits</a> are <a>exploitable.</a>

これは半分間違っています。ピリオドは 2 番目の単語にリンクされるべきではありません。上記の [^ ] を [^\b] のようなものに置き換える必要があることはわかっていますが、うまくいきません。

私はいつでも ie [^ .] を実行できることを知っていますが、たとえばコンマではなく、スペースとピリオドで終わる単語に対してのみ機能します。

4

3 に答える 3

0

\bexploit(\w*)\b- よりシンプル....

楽しんで

正規表現デモ

編集

文字だけが必要な場合はコメントどおり:

/\bexploit([a-z]*)\b/i

regexrデモのみの文字

于 2013-08-15T23:21:19.627 に答える
0

ユニコードを扱いたい場合は、次のようにします。

preg_replace('#\b(exploit\pL*)#u', '<a>$1</a>', 'My exploits are exploitable.');

Where\pLは任意の文字を表します。

于 2013-08-16T11:48:44.007 に答える
0

\b(exploit[a-zA-Z]*)トリックを行う必要があります。

余談: この Web サイトは、preg_replace を試すのに非常に便利です: http://www.fullonrobotchubby.co.uk/random/preg_tester/preg_tester.php

于 2013-08-15T23:17:35.667 に答える