【发布时间】:2011-01-21 12:56:54
【问题描述】:
我有一个想要匹配的 LaTeX 文档。我需要一个匹配以下内容的正则表达式:
\ # the backslash in the beginning
[a-zA-Z]+ #a word
(\{.+\})* # any amount of {something}
然而,她是关键;
在最后一行中,它 1. 需要贪心 2. 需要在其内部有一个匹配的{}。
如果我有字符串\test{something\somthing{9}} 的含义
它会匹配整个。它需要按照这个顺序 ({})。使其与以下内容不匹配:
\LaTeX{} 是 \TeX{} 的文档准备系统
只是
\LaTeX{}
和
\TeX{}
帮助任何人?也许有人对匹配有更好的想法?我不应该使用正则表达式吗?
【问题讨论】:
-
这不是你想要匹配的正则表达式,所以正则表达式不是最好的选择。话虽如此,您可以做到这一点,因为现在大多数正则表达式引擎都不正规,但这仍然不是一个好主意。
-
如果我有任何其他选择,我会选择它。但我不知道我可以使用的任何其他东西。你有什么好主意吗?如果没有,看来我被卡住了宽度 RegEx。
-
这不仅是偶数的
{和}(你可以使用正则表达式),而且你还想确保}}{{被拒绝(有相等数量的{和}!),并且当{和}出现在注释行中时,您会想要丢弃它们。简而言之:正则表达式不适合这个。 -
尽管新的 Ruby 1.9 正则表达式引擎支持查找正确嵌套的括号,但我不确定这是否正是我推荐的做法。但如果你愿意,可以搜索
\g,它可以让你选择一个命名的“子表达式”或类似的东西。 -
那么什么适合这个呢?