gpt4 book ai didi

regex - 如何将模式与可选的引号匹配?

转载 作者:行者123 更新时间:2023-12-03 23:33:09 24 4
gpt4 key购买 nike

一个人如何编写与可以包含引号的模式匹配的正则表达式,但是如果这样,则必须在开头和结尾都具有匹配的引号?

"?(pattern)"?


无效,因为它将允许以引号开头但不以引号结尾的模式。

"(pattern)"|(pattern)


可以,但是重复。有没有更好的方法可以做到这一点而不重复模式?

最佳答案

您可以通过使用backreferencesconditionals来获得解决方案,而无需重复:

/^(")?(pattern)(?(1)\1|)$/


火柴:


模式
“模式”


不符合:


“模式
模式”


但是,这种模式有些复杂。它首先查找可选的引号,如果找到,则将其放入反向引用1。然后搜索您的模式。然后,它使用条件语法说“如果再次找到后向引用1,则匹配它,否则不匹配”。整个模式为 anchored(这意味着它需要自己显示在一行上),这样就不会捕获不匹配的引号(否则 pattern中的 pattern"将会匹配)。

请注意,对条件的支持因引擎而异,更加冗长但重复的表达式将得到更广泛的支持(并且可能更易于理解)。



更新:此正则表达式的简单得多的版本是 /^(")?(pattern)\1$/,它不需要有条件的。最初测试时,我使用的测试仪给了我一个假阴性,这使我不喜欢它(糟糕!)。

我将为解决方案保留后代和兴趣的条件,但这是一个更简单的版本,更可能在更广泛的引擎中使用(反向引用是此处使用的唯一功能,可能不被支持)。

关于regex - 如何将模式与可选的引号匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3568995/

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