我有以下字符串,我只需要匹配[]括號之間的最後七個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