我有以下字符串,我只需要匹配[]括号之间的最后七个digets。该字符串看起来像正则表达式 - 匹配所有第二组括号([])
[15211Z:2012-09-12]([5202900])
我只需要包含([])之间的字符串相匹配5202900,类似的数可以在字符串中的任何地方出现这么像这样将无法工作(\d{7})
我也试过以下的正则表达式
([0-9] {1,7}])
但这包括字符串中的[]吗?
我有以下字符串,我只需要匹配[]括号之间的最后七个digets。该字符串看起来像正则表达式 - 匹配所有第二组括号([])
[15211Z:2012-09-12]([5202900])
我只需要包含([])之间的字符串相匹配5202900,类似的数可以在字符串中的任何地方出现这么像这样将无法工作(\d{7})
我也试过以下的正则表达式
([0-9] {1,7}])
但这包括字符串中的[]吗?
如果你只是想在7个位数,而不是括号,但要确保数字与括号括起来:
(?<=\[)\d{7}(?=\])
FYI:这就是所谓的正向前查找和正回顾后。
你可以尝试使用
\[(\d{1,7})\]
尝试匹配\(\[(\d{7})\]\)
,所以你匹配这整个正则表达式,然后你把第1组,转义括号之间的一个。您可以用'*'代替0或更多,+
代替1或更多或精确范围,就像您已经在您的问题中显示的那样。
请注意,这不仅仅与数字相匹配,而且可以很容易地检索数字,而不会使正则表达式变得不必要的复杂(例如,使用积极的前瞻或后视)。这些组比这些使用得多。 –
如果第一图案看起来像你的(不仅是数字),那么这应该为你工作,以提取括号像([123])
包围的数字组:
\(\[(\d+)\]\)
从您的详细资料看,lookbehind和lookaround似乎是一个好的。您也可以使用这一个:
(\d{7})\]\)$
由于七位的格局有望在的线,发动机需要月底才能找到配对的少,工作。
希望它能帮助!
这里是一个标杆(在Perl,但我认为是在PHP接近相同),其环视方法和捕获组比较:
use Benchmark qw(:all);
my $str = q/[15211Z: 2012-09-12] ([5202900])/;
my $count = -3;
cmpthese($count, {
'lookaround' => sub {
$str =~ /(?<=\[)\d{7}(?=\])/;
},
'capture group' => sub {
$str =~ /\[(\d{7})\]/;
},
});
结果:
Rate lookaround capture group
lookaround 274914/s -- -70%
capture group 931043/s 239% --
我们可以看到,捕获速度比lookaround快3倍以上。
你用的是什么正则表达式? – HamZa
@HamZaDzCyberDeV - 使用正则表达式和PHP一起使用 – Roland
使用'(?<= \ [)\ d {7}(?= \])',[demo](http://regex101.com/r/lC8kA5)。 – HamZa