Jak*_*ake 13 regex repeat quotations surround
如何编写与可以包含引号的模式匹配的正则表达式,但如果匹配,则必须在开头和结尾具有匹配的引号?
"?(pattern)"?
Run Code Online (Sandbox Code Playgroud)
将无法工作,因为它将允许以引号开头但不以一个结尾的模式.
"(pattern)"|(pattern)
Run Code Online (Sandbox Code Playgroud)
会工作,但重复.有没有更好的方法来做到这一点而不重复模式?
Dan*_*uis 19
/^(")?(pattern)(?(1)\1|)$/
Run Code Online (Sandbox Code Playgroud)
火柴:
不匹配:
然而,这种模式有点复杂.它首先查找可选引用,如果找到,则将其置于反向引用1中.然后它搜索您的模式.然后它使用条件语法来说"如果再次找到反向引用1,匹配它,否则不匹配".整个模式被锚定(这意味着它需要单独出现在一条线上),以便不会捕获不匹配的引号(否则patternin pattern"将匹配).
请注意,对条件的支持因引擎而异,更加冗长但重复的表达式将得到更广泛的支持(并且可能更容易理解).
更新:这个正则表达式的一个更简单的版本将是/^(")?(pattern)\1$/,它不需要条件.当我最初测试时,我使用的测试仪给了我一个假阴性,这导致我打折它(哎呀!).
我将保留解决方案的条件性后代和兴趣,但这是一个更简单的版本,更有可能在更广泛的引擎中工作(反向引用是这里使用的唯一可能不受支持的功能).
| 归档时间: |
|
| 查看次数: |
9105 次 |
| 最近记录: |