【发布时间】:2019-03-11 20:55:57
【问题描述】:
我昨天问了一个类似的问题,但我仍然缺乏正则表达式的某些部分的知识。
反正我有这个字符串:
[[{{6^-2}}x{{6^3}}|{{6^-2}}]]
我想匹配以下正则表达式:
\[\[(.*?)\^(.*?)\]\]
所以基本上想隔离这个字符串是否有 [[anything^anything]]
它在一定程度上有效,但它也是匹配的,因为那里有 ^ 符号。我不希望这个匹配那些,这个表达式不应该匹配,因为方括号之间的符号是| 而不是^。
基本上它应该忽略 {}
内的部分编辑更有意义:
示例字符串:[[{{hello^test}}|{{goodbye}}]] 我的模式:[[(.?)\^(.?)]] 预期匹配:错误,因为我只想匹配 ^ 如果它是由 [[ ]] 包围的字符串的外部部分的一部分,而不是如果它在 {{ }}
内示例字符串:[[{{hello^test}}^{{goodbye}}]] 我的模式:[[(.?)\^(.?)]] 预期匹配:True,因为 [[ ]] 内的 ^ 两边都匹配,忽略 {{ }}
内的内容示例字符串:[[{{hello^test}}^{{goodbye^test}}]] 我的模式:[[(.?)\^(.?)]] 预期匹配:真,因为 ^ 再次位于 {{ }} 的两个部分之间,需要忽略 {{ }}
中的内容示例字符串:[[{{hello^test}}|{{goodbye^test}}]] 我的模式:[[(.?)\^(.?)]] 预期匹配:错误,因为 [[ ]] 内没有 ^ 仅在 {{ }} 内应该被忽略
我的模式不起作用,因为它还拾取 {{ }} 内的 ^ 符号并匹配它的任一侧,我需要它匹配包裹在 [[ ]] 中的 ^ 的任一侧不是{{}}
我希望这是有道理的..
【问题讨论】:
-
你的预期输出是什么?
-
在这种情况下它不应该匹配,因为 [[ ]] 内没有 ^ 符号,它是 |它不应该与 {{ }} 中的 ^ 匹配的符号
-
基本上需要该模式忽略 {{x^x}} 位,并且仅在字符串为 [[whatever^whatever]]] 时才匹配
-
@GlenElkins
whatever总是有这种格式{{something inside}}吗? -
编辑了问题,希望更有意义
标签: php regex preg-match