0

我在 php 中有这个 preg_replace,它几乎正确地将每个以“exploit”开头的单词替换为链接:

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

我明白了:

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

这是一半错误,句号不应该连接在第二个单词上。我知道我需要将上面的部分 [^ ] 替换为 [^\b] 之类的东西,但它不起作用。

我知道我总是可以这样做,即 [^ .] 但它只适用于以空格和句号结尾的单词,而不是逗号。

4

3 回答 3

0

\bexploit(\w*)\b - more simple....

have fun

regexrDemo

EDIT

as commented if you want only letters:

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

regexrDemo only letters

于 2013-08-15T23:21:19.627 回答
0

如果你想处理 unicode,你可以这样做:

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]*)应该做的伎俩。

旁白:这个网站对于尝试 preg_replace 非常方便:http ://www.fullonrobotchubby.co.uk/random/preg_tester/preg_tester.php

于 2013-08-15T23:17:35.667 回答