如何使用正则表达式匹配不跟在后面的元素?

问题描述

| 如何匹配此字符串?
${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}
    

解决方法

        您可以使用这样的负面眼神来确保这样的标准
\\$\\{(.*)(?<!\\d)\\}
您可以在Regexr上在线查看它。 您的字符串在组1中。 否定的前瞻确保它仅与不带数字的
}
匹配。     ,        这适用于您的测试用例,但是如果您想要更好的常规正则表达式,则需要更清楚地了解需要捕获的数据如何变化 正则表达式:
/\\${(.*[^0-9])}/
用Javascript:
alert( \"${test {0}}\".match( /\\${(.*[^0-9])}/ )[1] )
    ,        (按照您的示例进行编辑……)像这样:
/\\$\\{((?:.+?|\\{\\d+\\})+?)\\}/
期待巨大的回溯,尽管...     ,        :11ѭ 这是一个使用给定示例完成工作的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}
    ,        不知道您需要哪种语言的解决方案,但是以下内容在PHP中对我有效:
$arr = array(\'${test {0}}\',\'${any string}\',\'${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}\"
    ,        
(?<={)([^{}]*({\\d+})*[^{}]*)+(?=})
它已通过RAD软件正则表达式设计器进行了测试。此正则表达式适用于.NET和Java环境。 您应该将此正则表达式用于Javascript。
{([^{}]*({\\d+})*[^{}]*)+}
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...