我有一个正则表达式来查找没有花括号“([^ \ {\}] +)”的字符串。这样它就可以从后面的字符串中提取“cde”:
“AB {CDE} F”
现在我需要使用“\}”将“{”与“\ {”和“}”一起转义。
因此,如果我的原始字符串是“ab {cd \ {e \}} f”,那么我需要提取“cd {e}”或 “cd \ {e \}”(我可以稍后删除“\”。
提前致谢。
答案 0 :(得分:2)
这应该有效:
([^{}\\]|\\{|\\})+
答案 1 :(得分:2)
请注意,任何正则表达式特殊字符都可以通过将它们放在一个范围内(即方括号)来有效地转义。所以:
所以:
$ echo "ab{cde}f" | sed -r 's/[^{]*[{](.+)}.*/\1/'
cde
$ echo "ab{c\{d\}e}f" | sed -r 's/[^{]*[{](.+)}.*/\1/'
c\{d\}e
或者:
$ echo "ab{cde}f" | sed 's/[^{]*{//;s/}[^}]*$//'
cde
$ echo "ab{c\{d\}e}f" | sed 's/[^{]*{//;s/}[^}]*$//'
c\{d\}e
甚至:
$ php -r '$s="ab{cde}f"; print preg_replace("/[^{]*[{](.+)}.*", "$1", $s) . "\n";'
cde
$ php -r '$s="ab{c\{d\}e}f"; print preg_replace("/[^{]*[{](.+)}.*/", "$1", $s) . "\n";'
c\{d\}e
显然,这不会处理转义反斜杠。 : - )
答案 2 :(得分:2)
要允许你的大括号内的逃脱,你可以使用:
{((?:[^\\{}]+|\\.)*)}
my $str = "ab{cd\\{e\\}} also foo{ad\\}ok\\{a\\{d}";
print "$str\n";
print join ', ', $str =~ /{((?:[^\\{}]+|\\.)*)}/g;
输出:
ab{cd\{e\}} also foo{ad\}ok\{a\{d}
cd\{e\}, ad\}ok\{a\{d
答案 3 :(得分:0)
\{(.+)\}
将提取第一个和最后一个大括号之间的所有内容