加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 17:12:39 所属栏目:PHP教程 来源:网络整理
导读:我来啦: 我正在编写一个PHP应用程序,我有一个新的官方域名,现在所有的FAQ都在这里.我脚本中的一些文件包含旧FAQ域的帮助链接,因此我想使用新域替换它们.但是,我想保留链接到旧域的URL,只要它们位于注释或注释块下面(我仍然使用旧域进行自我引用和其他文档).
我来啦:

我正在编写一个PHP应用程序,我有一个新的官方域名,现在所有的FAQ都在这里.我脚本中的一些文件包含旧FAQ域的帮助链接,因此我想使用新域替换它们.但是,我想保留链接到旧域的URL,只要它们位于注释或注释块下面(我仍然使用旧域进行自我引用和其他文档).

所以,基本上,我想要实现的是一个正则表达式,它具有以下功能:

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

我经常写这样的块评论:

/* text
 * blah 
 * blah
*/

这就是为什么我不想匹配“example.com”,如果它位于//,/ *或“*”之后.

我想它会是这样的:

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

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

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

哦,请告诉我是否有办法以某种方式概括块注释,例如:找到/ *后,在找到* /之前不匹配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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读