gpt4 book ai didi

php - 正则表达式查找未注释的字符串?

转载 作者:行者123 更新时间:2023-12-03 20:42:50 25 4
gpt4 key购买 nike

我想要一个正则表达式来查找任何给定的字符串,但前提是它没有用单行注释进行注释。

如果字符串位于多行注释中,我不介意它是否找到该字符串(因为我认为正则表达式会复杂得多)。

举个例子,假设我想要“mystring”(没有引号):

mystring bla bla bla <-- should find this
bla bla mystring bla <-- also this
// bla bla mystring <-- not this , because is already commented
//mystring <-- not this
// alkdfjñas askfjña bla bla mystring <-- not this
wsfier mystring añljkfasñf <--should find this
mystring //a comment <-- should find this
bla bla // asfsdf mystring <-- should SKIP this, because mystring is commented
/*
asdfasf
mystring <-- i dont care if it finds this, even if it is inside a block comment
añfkjañsflk
// aksañl mystring <-- but should skip this, because the single line is already commented with '//' (regardless the block comment)

añskfjñas
asdasf
*/

换句话说,我只想查找 mystring 中尚未用“//”注释的情况,即单行注释。 (同样,我不关心多行注释)。

谢谢!

更新,我找到了一个简单的答案,并且比下面接受的答案(无论如何也有效)更容易理解。

它很简单:^([^//]*)mystring

因为我不关心我是只匹配“mystring”还是匹配它之前的所有内容,所以这个更简单的 Regex 可以完美地工作。对于我需要的,它是完美的,因为我只需要用未注释的字符串(不一定是确切的字符串)物理定位 LINES,然后注释它们,因为我的编辑器 (Notepad++) 允许我使用简单的快捷方式注释/取消注释(Ctrl+Q),我只需要使用正则表达式搜索行,在它们之间跳转(使用 F3),然后按 Ctrl+Q 对其进行注释或保留它们(如果我仍然需要它们)。

在这里试试 http://regex101.com/r/jK2iW3

最佳答案

如果 lookbehinds 可以接受不确定的 wifth 表达式,你就可以在 PHP 中使用 lookbehind,但实际上你并不真的需要 lookbehinds :) lookahead 可以做到:

^(?:(?!//).)*?\Kmystring

regex101 demo

\K 重置匹配。

如果你突然想通过说你不想要 block 注释中的部分来进一步插入它,你可以使用更多的先行:

^(?:(?!//).)*?\Kmystring(?!(?:(?!/\*)[\s\S])*\*/)

regex101 demo

^(?s)(?:(?!//).)*?\Kmystring(?!(?:(?!/\*).)*\*/)

附录:

如果您还想在同一行中获取多个 mystring,请将 ^ 替换为 (?:\G|^)

\G 在上一场比赛结束时进行比赛。

关于php - 正则表达式查找未注释的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19324668/

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