我试图找到一个可以出现在注释块中的字符串。这个字符串可以是一个单词,但也可以是一个单词的一部分。例如,假设我在寻找“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 );

10-04 11:16