有没有办法使用正则表达式来获取最外层分隔符之间的文本?我在这里有一个字符串,希望在最外面的{%%%
和%%%}
分隔符之间获取文字:
Hello {%%%=Select(DepartmentID,1,{%%%=if(Gender="M","Mr.","Ms.")%%%}%%%} {%LastName%}
我想要的文字是:
=Select(DepartmentID,1,{%%%=if(Gender="M","Mr.","Ms.")%%%}
正则表达式会是什么?我知道里面的文字没有多大意义,这只是一个例子。
答案 0 :(得分:1)
这种模式将做一个积极的前瞻:
[^%=]*.{%%%(.+)%%%}.+[^%}]*
捕获组:
$1
示例:http://regex101.com/r/eG4fV9
编辑:似乎有些人喜欢在选择答案correct
之后出现,然后添加可能无法工作的场景。但是,根据使用某物的情况,可以做任何事情incorrect
。
原始答案:
(?<={%%%=).+(?=}%%%)[^%]
可选的:
[^%=]*.{%%%=(.+)%%%}.+[^%}]*
这将在匹配中保留=
符号。
答案 1 :(得分:0)
一般情况下,如果你找不到分隔符的一些独特功能(例如Eugen Rieck在评论中指出的话 - 它是一个很好的特定解决方案如果他只将其改为非贪婪< / strike>),标准的正则表达式无法做到。
一些正则表达式引擎,如Ruby的Oniguruma,可以使用递归正则表达式。像(在我头顶)的东西:
/{(?<braced>[^{}]*(?:{\g<braced>}[^{}]*)?)}/
答案 2 :(得分:0)
试试这个:/.*?\{\%\%\%(.*)\%\%\%\}.*/
这是fiddle
答案 3 :(得分:0)
Chris,这里有两个选项可以匹配你正在寻找的东西,使用递归正则表达式:
选项1:
\{((?:[^{}]++|(?R))*)\}
选项2:
\{(([^{}]*+)(?:(?R)(?2))*)\}
这是PCRE语法,例如在PHP中。
您使用的是哪种语言和正则表达式引擎?这些模式可以适应其他几种支持递归的方式。