gpt4 book ai didi

php - 正则表达式:匹配所有行中的子字符串,除非子字符串在注释部分内

转载 作者:可可西里 更新时间:2023-10-31 23:08:16 24 4
gpt4 key购买 nike

我来了:

我正在编写一个 PHP 应用程序,并且我有一个新的官方域名,所有常见问题解答现在都位于其中。我的脚本中的一些文件包含指向旧 FAQ 域的帮助链接,因此我想使用新域替换它们。但是,我只想保留链接到旧域的 URL,前提是它们位于评论或评论 block 下(我仍然使用旧域进行 self 引用和其他文档)。

所以,基本上,我想要实现的是一个在给定以下情况下有效的正则表达式:

  1. 匹配所有行中出现的所有 example.com*。
  2. 不要匹配整行,只匹配 example.com 字符串。
    • 如果行以 ///* 或“*”开头,则不匹配其中的任何 example.com 实例单行(但是,如果注释 block 在打开它的同一行中关闭,这可能会出现问题)。

我通常这样写 block 注释:

/* text
* blah
* blah
*/

这就是为什么我不想匹配位于 ///* 或“*”之后的“example.com”。

我想应该是这样的:

^(?:(?!//|/\*|\s\*).?).*example\.com

但这有一个问题:它匹配整行,而不是仅匹配“example.com”(这主要是在一行中匹配两个或多个“example.com”字符串时导致问题)。

有人可以帮我修复我的正则表达式吗? 请注意:它不一定是 PHP 正则表达式,因为我总是可以使用像 grepWin 这样的工具在本地同时编辑所有文件。

哦,请让我知道是否有一种方法可以以某种方式概括 block 注释,例如:一旦找到 /*,就不要匹配 example.com 直到找到 */。那将非常有用。 是否有可能在一般(非语言依赖)正则表达式中实现它?

最佳答案

一个只匹配 example.com 的正则表达式,如果它不在评论部分(但它不关心行评论,所以你必须单独执行此操作):

$result = preg_replace(
'%example\.com # Match example.com
(?! # only if it\'s not possible to match
(?: # the following:
(?!/\*) # (unless an opening comment starts first)
. # any character
)* # any number of times
\*/ # followed by a closing comment.
) # End of lookahead
%sx',
'newdomain.com', $subject);

关于php - 正则表达式:匹配所有行中的子字符串,除非子字符串在注释部分内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11707434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com