2013-01-03 70 views
-1

我有以下字符串負環視正則表達式

.proxy.com TRUE / FALSE 0 COOKIE%253BCartID%253B%252F%253Bwww.proxy.com 1914104745%253B 

和下面的正則表達式

[a-zA-Z0-9\%]{14,15} 

我想只匹配1914104745%253B卻是撿了COOKIE%253BID,我試着做負斷言這樣

[a-zA-Z0-9\%]{14,15}[?!COOKIE] 

但不起作用

任何人都可以幫助這個正則表達式嗎?

+0

是你想匹配的字符串是否有修復長度? – slier

+0

你是什麼意思? – user1940354

+0

你想捕捉的字符串是否總是以數字開頭? –

回答

2

爲什麼不直接錨定到字符串的結尾與[a-zA-Z0-9%]{14,15}$

$str=".proxy.com TRUE / FALSE 0 COOKIE%253BCartID%253B%252F%253Bwww.proxy.com 1914104745%253B"; 
preg_match('/[a-zA-Z0-9%]{14,15}$/',$str,$match); 
echo $match[0]; 

>>> 1914104745%253B 

如果你想匹配的嚴格的格式,你可以使用一些諸如\d{10}%\d{3}[A-Z]$,你可以刪除$如果字符串的一部分匹配不會總是在字符串的末尾,無論哪種方式,只有1914104745%253B將在您的示例中匹配。

注意:%不需要轉義。

+0

我如何保持這個長度的斷言? {14,15} – user1940354

+0

沒有區別,因爲你有'[a-zA-Z0-9%] {14,15} $'只是'$'匹配字符串的末尾。 –

1

試試這個

(?<=\s)[\w%]{14,15}(?:(?=\s)|$) 

Demo

+0

該字符串不是固定長度'{14,15}'。 –

+0

@thx爲信息,更新了正則表達式 – slier

0

向前看符號使用圓括號,而不是方的。但我不認爲前瞻自身將幫助這裏:

(?!COOKIE)[a-zA-Z0-9\%]{14,15} 

會阻止它匹配COOKIE%253BCart但隨後它只會匹配OOKIE%253BCartI代替。使用末尾的$來固定該行末尾的匹配可能是最簡單的方法。

0

你只是想獲得最後一串非空白字符的行嗎?然後用這個

(\S+)$ 

你也可以使用preg_split拆就空白,並採取它返回數組的最後一個元素。