当前位置: 首页 > 知识库问答 >
问题:

Regex:在花括号之间查找字符串,它本身包含花括号

权兴为
2023-03-14

假设一个字符串的格式如下:

Use \hyperlink{aaa}{apple {pear} banana} and \hyperlink{bbb}{banana {pear} {apple}}.

我想提取:

\hyperlink{aaa}{apple {pear} banana}
\hyperlink{bbb}{banana {pear} {apple}}

什么正则表达式可以用于这样的提取?

我被这个困住了:

\\hyperlink{\S+}{.+}

共有2个答案

穆旭尧
2023-03-14

如果没有任意嵌套,可以使用带有否定的}{的模式,如

\\hyperlink{[^}{]*}{[^}{]*(?:{[^}{]*}[^}{]*)*}

与这个答案相似,但展开了。请参见regex101上的演示。要{提取}请使用组(演示)。

根据您的环境/正则表达式的风格,可能需要对不在字符类中的大括号使用反斜杠来转义开头的{,以便逐字匹配它们。

进一步注意,\S可以消耗} 可以匹配更多。

应子真
2023-03-14

下面是如何使用递归正则表达式实现的

\\hyperlink\{[^}]+?\}(\{(?>[^{}]+|(?1))+\})(?=\s|$)

Regex演示

递归正则表达式

 类似资料:
  • 我需要解析一个日志文件并获取时间和相关的函数调用字符串,该字符串存储在日志文件中,如下所示:{“time”:“2012-09-24t03:08:50”,“message”:“call()started”} 在其他字符串字符之间会有多个日志时间函数调用,因此我希望使用regex来遍历文件并获取所有这些 我想获取整个记录的信息,包括花括号 我不断得到非法重复错误,请帮助!谢了。

  • 问题内容: PHP字符串文字中的(花括号)是什么意思? 问题答案: 这是字符串插值的复杂(弯曲)语法。从手册中: 复杂(卷曲)语法 之所以称其为“复杂”,是因为语法复杂,而是因为它允许使用复杂的表达式。 可以通过此语法包括具有字符串表示形式的任何标量变量,数组元素或对象属性。只需以与出现在字符串外部相同的方式编写表达式,然后将其包装在和中即可。由于无法转义,因此仅在紧随其后的才会识别此语法。使用

  • 当我使用之类的东西时,它仍然会触发,就像连字符无效一样。我尝试了和

  • 问题内容: 不幸的是,尽管尽我所能记住,每年尝试至少一年学习一次正则表达式,但我却经常忘记,因为我很少使用它们。今年,我新年的决心是不要再尝试学习正则表达式因此,今年,为了避免让我流泪,我将把它交给Stack Overflow_ 。 我想以这种格式传递一个字符串,然后返回该字符串。有人能协助我们坚持我的新年决议吗? 问题答案: 如果您的字符串将始终是该格式,则正则表达式会显得过大: 表示以一个字符

  • 问题内容: 我对这个尖角世界是陌生的,我对使用双花括号{{}}和单花括号{}感到困惑,或者有时不使用花括号来包含指令中的表达式 问题答案: {{}}-双大括号: 是Angular表达式,当您希望将内容编写为HTML时非常方便: 不要在已经是表达式的地方使用它们! 例如,该指令将引号之间的任何内容都视为一个表达式: {}-大括号: 我们知道JavaScript代表对象。这里也没有什么不同: 使用一些

  • 问题内容: 有没有一种快速的方法可以使Eclipse将花括号放在代码块的下一行上(本身)? 问题答案: 对于预先编写的代码块,请先按照Don的建议进行设置,然后选择该代码段,然后右键单击SourceCode->Format,然后按照首选项中的设置进行格式化。