2012-08-23 36 views
0

我需要編寫一個正則表達式,在看到"aaa"代碼之後,此正則表達式應該只打印6位數的代碼,而不是整行。一行中只有一個6位數的代碼,並且在"aaa"之後。如何在不使用其他工具的情況下僅使用正則表達式提取匹配模式

我不能使用sed,awk, grep等。我的申請只接受正則表達式。

例子:

x aaa y z 123456   returns 123456 

aaa x 654321 y z   returns 654321 

我想這正則表達式後向引用,不知道如何不重複[\d]{6}雖然

(.*)(aaa)(.*)[\d]{6}((?(2)[\d]{6}|.+) 

但它打印整條生產線。

有什麼建議嗎?

+0

一行中只有一個6位數的代碼...你不能只是去「\ d {6} 「? – hovanessyan

+0

'x 123456 y'.match(/ \ b \ d {6} \ b /); // [「123456」] –

回答

0

你可以做類似

aaa.+?(\d{6}) 

,然後只返回第一組(\1

您也可以使用反向引用具有不同的正則表達式:

(?<=aaa.+?)\d{6} 

這種手段你想要aaa和其他任何字符後面的前6位數字。不幸的是許多語言不支持可變長度的反向引用,所以我會去第一個

+0

我錯過了什麼嗎? http://regexr.com?31u0j –

+0

無法看到該網站,請把它放在紅寶石上? – Gabber

+0

非常感謝Gabber。讓我研究一下這個代碼:-) –

相關問題