我有以下字符串:
123,123)test)代替debug,可以有其他调用,如warn、fatal等。所有的引号对都可以是""、''或``。
我需要创建一个普通的快车,它与1-5但不是6- 11匹配。
这就是我想出来的:
logger.*\(['`].*['`],\s*.([^{.*}])这也符合8-11,所以我怀疑这部分是错误的,([^{.*}]),但我不明白为什么。
发布于 2020-03-31 10:31:13
你可以试试这个
logger\.[^(]+\((?:"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|`(?:\\`|[^`])*`),[^{}]*?\)

P.S:如果我们确信引号不会错配,如果字符串中没有转义引号,这个模式可以缩短。
如果没有转义字符串
logger\.[^(]+\((?:"[^"]*"|'[^']*'|`[^`]*`),[^{}]*?\)如果字符串之间没有引号。也就是没有像"mr's jhon这样的字符串
logger\.[^(]+\(([`"'])[^"'`]*\1,[^{}]*?\)发布于 2020-03-31 10:41:19
如果引用的部分之间没有引号,则可以使用捕获组匹配引用类型之一(['`"]),并使用反向引用\1匹配结束引号类型。
否定字符类中的\r\n不跨越换行符边界。
该模式将匹配引用的部分或1+时间的第一部分的单词字符。
第二部分匹配除{、}或)以外的使用否定字符类的任何字符。
logger\.[^(\r\n]+\((?:(['`"])[^'`"]+\1|\w+),[^{})\r\n]+\)那就匹配了
logger\.匹配logger.[^(\r\n]+匹配1+乘以除(或换行符以外的任何字符\(匹配((?:非捕获群(['`"])捕获组1[^'`"]+\1匹配1+乘以除引号类型以外的任何字符,向捕获的字符反向引用|或\w+匹配1+单词字符
),关闭非捕获组并匹配,[^{})\r\n]+匹配1+乘以除{ } )或换行符以外的任何字符\)匹配)https://stackoverflow.com/questions/60948059
复制相似问题