我试图找到一个可以出现在注释块中的字符串。这个字符串可以是一个单词,但也可以是一个单词的一部分。例如,假设我在寻找“codex”这个词,那么这个词应该替换为“bindex”,但即使它是一个词的一部分,比如“codexing”。这应该改为“bindexing”。
诀窍是,只有当这个词在注释块中时,才会发生这种情况。
/* Lorem ipsum dolor sit amet, codex consectetur adipiscing elit. */
This word --> codex should not be replaced
/* Lorem ipsum dolor sit
* amet, codex consectetur
* adipiscing elit.
*/
/** Lorem ipsum dolor sit
* amet, codex consectetur
* adipiscing elit.
*/
// Lorem ipsum dolor sit amet, codex consectetur adipiscing elit.
# Lorem ipsum dolor sit amet, codex consectetur adipiscing elit.
------------------- Below "codex" is part of a word -------------------
/* Lorem ipsum dolor sit amet, somecodex consectetur adipiscing elit. */
/* Lorem ipsum dolor sit
* amet, codexing consectetur
* adipiscing elit.
*/
And here also, this word --> codex should not be replaced
/** Lorem ipsum dolor sit
* amet, testcodexing consectetur
* adipiscing elit.
*/
// Lorem ipsum dolor sit amet, __codex consectetur adipiscing elit.
# Lorem ipsum dolor sit amet, codex__ consectetur adipiscing elit.
到目前为止我得到的是这个代码:
$text = preg_replace ( '~(\/\/|#|\/\*).*?(codex).*?~', '$1 bindex', $text);
正如你所看到的,这并不是我想要的那样。当它位于多行注释块中时,它不会替换单词,有时它还会删除单词“codex”前面的所有文本。
如何改进正则表达式,使其满足我的要求?
最佳答案
因为这里要处理多行文本,所以应该使用s
修饰符(dotall)跨多行匹配文本。也不需要转义正斜杠。
请尝试以下代码:
$text = preg_replace ( '~(//|#|/\*).*?(codex).*?~s', '$1 bindex', $text );