我该如何匹配此字符串?
${test {0}}
我需要匹配${
和}
之间的所有内容,其中}
前面没有数字,因此我可以检索test {0}
。
是否可以单独匹配正则表达式模式?
样品:
${any string} == any string
${string - {x} == string - {x
${{0} a} == {0} a
${a {1} b {3} c {2} d {0}} == a {1} b {3} c {2} d {0}
答案 0 :(得分:3)
答案 1 :(得分:1)
这适用于您的测试用例,但如果您想要更好的通用正则表达式,则需要更清楚地了解需要捕获的数据如何变化
正则表达式:
/\${(.*[^0-9])}/
在Javascript中:
alert( "${test {0}}".match( /\${(.*[^0-9])}/ )[1] )
答案 2 :(得分:0)
(编辑跟进你的例子......)像这样:
/\$\{((?:.+?|\{\d+\})+?)\}/
期待庞大的回溯,但是......
答案 3 :(得分:0)
(?<={)([^{}]*({\d+})*[^{}]*)+(?=})
已经使用RAD Software Regular Expression Designer进行了测试。此正则表达式适用于.NET和Java环境..
您应该将此正则表达式用于Javascript ..
{([^{}]*({\d+})*[^{}]*)+}
答案 4 :(得分:0)
如何:/\$\{(.*)\}/
这是一个使用给定示例完成工作的perl脚本:
#!/usr/bin/perl
use Modern::Perl;
my @l = ('${any string}','${string - {x}','${{0} a}','${a {1} b {3} c {2} d {0}}');
my $re = qr/\$\{(.*)\}/;
foreach(@l) {
say $1 if $_ =~ $re;
}
<强>输出:强>
any string
string - {x
{0} a
a {1} b {3} c {2} d {0}
答案 5 :(得分:0)
不确定哪种语言需要使用此解决方案,但以下内容适用于PHP:
$arr = array('${test {0}}', '${any string}', '${string - {x}', '${{0} a}', '${a {1} b {3} c {2} d {0}}');
foreach ($arr as $s) {
if (preg_match('~\$\{(.+?[^\d])}~', $s, $m ) > 0)
var_dump($s . ' == ' . $m[1]);
}
string(23) "${test {0}} == test {0}"
string(27) "${any string} == any string"
string(29) "${string - {x} == string - {x"
string(17) "${{0} a} == {0} a"
string(53) "${a {1} b {3} c {2} d {0}} == a {1} b {3} c {2} d {0}"