php - 正则表达式匹配我不想再匹配的东西
问题描述
我昨天问了一个类似的问题,但我仍然缺乏对正则表达式某些部分的了解。
无论如何,我有这个字符串:
[[{{6^-2}}x{{6^3}}|{{6^-2}}]]
我想匹配以下正则表达式:
\[\[(.*?)\^(.*?)\]\]
所以基本上想隔离这个字符串是否有 [[anything^anything]]
它在一定程度上有效,但它也匹配,因为^
那里是符号。我不希望这个匹配那些,这个表达式不应该匹配,因为符号|
不在^
方括号之间。
基本上它应该忽略 {} 内的部分
更有意义的编辑:
示例字符串:[[{{hello^test}}|{{goodbye}}]] 我的模式:[[(. ?)\^(. ?)]] 预期匹配:False 因为我只想匹配 ^ if它是由 [[ ]] 包围的字符串外部的一部分,如果它在 {{ }} 内则不是
示例字符串:[[{{hello^test}}^{{goodbye}}]] 我的模式:[[(. ?)\^(. ?)]] 预期匹配:True 因为两边的 ^ 在 [[ ]] 匹配,忽略 {{ }} 中的内容
示例字符串:[[{{hello^test}}^{{goodbye^test}}]] 我的模式:[[(. ?)\^(. ?)]] 预期匹配:True 因为 ^ 再次位于{{ }} 中的两个部分,需要忽略 {{ }} 中的内容
示例字符串:[[{{hello^test}}|{{goodbye^test}}]] 我的模式:[[(. ?)\^(. ?)]] 预期匹配:False,因为在[[ ]] 仅在 {{ }} 内,应忽略
我的模式不起作用,因为它还拾取 {{ }} 内的 ^ 符号并匹配它的任一侧,我需要它匹配包裹在 [[ ]] 中的 ^ 的任一侧而不是 {{ }}
我希望这是有道理的..
解决方案
\[\[(\{\{.+?\}\}|[^^{}]+)\^(.+?)\]\]
解释:
\[\[ # 2 opening square brackets
( # start group 1
\{\{ # 2 opening curly braces
.+? # 1 or more any character, not greedy
\}\} # 2 closing curly braces
| # OR
[^^{}]+ # 1 or more NON carret or curly braces
) # end group 1
\^ # a carret
(.+?) # group 2, 1 or more any characters, not greedy
\]\] # 2 closing square brackets
推荐阅读
- c# - 如何正确反序列化 Json 字符串
- android - 为什么我在按钮周围有边距?
- python - 在单独的txt文件中导出csv的每一行显示键错误
- javascript - 使用 Reflect ES6 获取子属性
- g++ - 我可以更改 g++ 的修饰以匹配 xlC 吗?
- ruby - 将下拉菜单中的文本选项放入数组中以进行迭代以导航到不同的页面
- azure-spatial-anchors - Azure 空间锚可以在建筑物中的多个楼层使用吗?
- python - 如何将 JSX 之类的语言嵌入到 python 脚本中?
- json - 使用 jq 递归查找具有给定键名的第一个 json 对象
- python-3.x - Google Colab 上没有名为“cupy”的模块