我讨厌提出具体问题,但我需要正则表达式代码来匹配字符串,如:
{block any_single_word_here}
Anything Here
{/block}
答案 0 :(得分:3)
你的原始查询非常接近,虽然有点冗长。它可以缩写为:
/{block (.+?)}(.+?){\/block}/
(?
修饰符可使+
停止“贪婪”,因此您无需在下一个}
或{
明确停止匹配。 )
接下来,您必须考虑默认情况下.
与新行不匹配。您可以使用/s
标志更改此内容:
/{block (.+?)}(.+?){\/block}/s
这里是the documentation from man perlre
:
<强>取值强>
将字符串视为单行。也就是说,更改“
.
”以匹配任何字符,即使是换行符,通常也不匹配。
答案 1 :(得分:0)
这可以胜任吗?
/\{block \w+\}\r?\n.*?\r?\n\{\/block\}/i
答案 2 :(得分:0)
在javascript中(将转义添加到原始字符串中的行尾)我向正则表达式添加了\s*
(零个或多个空格),并输出any_single_word_here
和Anything Here
的匹配项细...
alert( "{block any_single_word_here}\
Anything Here\
{/block}".match(/\{block ([^\}]+)\}\s*([^\{]+)?\{\/block}/) )
对于更简单的正则表达式,请删除不必要的转义,然后使用.
而非复杂[^\}]
/{block (.+)}\s*(.+){\/block}/