繁体   English   中英

正则表达式匹配我不想再匹配的东西

[英]Regex matching things i don't want to again

我昨天问了一个类似的问题,但我仍然缺乏对正则表达式某些部分的了解。

无论如何,我有这个字符串:

[[{{6^-2}}x{{6^3}}|{{6^-2}}]]

我想匹配以下正则表达式:

\[\[(.*?)\^(.*?)\]\]

所以基本上想隔离这个字符串是否有 [[anything^anything]]

它在一定程度上起作用,但它也匹配,因为那里有^符号。 我不希望这个匹配那些,这个表达式不应该匹配,因为符号是| 不是方括号之间的^

基本上它应该忽略 {} 内的部分

更有意义的编辑:

示例字符串:[[{{hello^test}}|{{goodbye}}]] 我的模式:[[(. ?)\\^(. ?)]] 预期匹配:False 因为我只想匹配 ^ 如果它是由 [[ ]] 包围的字符串外部的一部分,而不是它在 {{ }} 内

示例字符串:[[{{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

演示

试试这个模式: ^[^{]*(?=({.*?(?1)?.*?})*[^{]*\\^).+$

它使用递归来确保^字符不会在花括号内。 我建议阅读有关正则表达式递归的内容,而不是解释整个正则表达式(例如此处)。 然后正则表达式将很容易理解。

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM