2012-06-13 255 views
1

這裏的正則表達式的條件本身:不包括在正則表達式

/\.([^\.]*)/g 

但對於字符串name.ns1.ns2抓到.ns1和。 ns2值(這確實很有意義)。是否有可能只獲得ns1ns2的結果?也許使用斷言,nuh?

+0

爲了澄清起見,你可以添加一些示例字符串與他們想要的匹配嗎? – Wiseguy

+0

@Wiseguy它只需要在點之後捕獲任何東西:'something.catch.catch' –

+0

哦,所以目前的匹配包括'.',但是你想排除'.'?這就是你的子模式。 – Wiseguy

回答

2

你有捕獲組,使用它的值,但是你用你的語言來做。

JavaScript示例:

var list = "name.ns1.ns2".match(/\.([^.]+)/g); 
// list now contains 'ns1' and 'ns2' 

如果你可以使用lookbehinds(最現代的正則表達式的口味,但不是JS),你可以使用這個表達式:

(?<=\.)[^.]+ 

在Perl中,你也可以使用\K像這樣:

\.\K[^.]+ 
0

你可以使用類似字符串分割的東西,它允許你將字符串分解成特定字符串(比如句點)嗎?

目前尚不清楚您使用的是哪種語言,但幾乎所有現代語言都提供了分割字符串的方法。例如,這個僞代碼:

string myString = "bill.the.pony"; 
string[] brokenString = myString.split("."); 
+0

我沒有遇到特別的問題,我很感興趣如何用正則表達式來實現。 –

+0

@pyrate可以理解。 – kevin628

+0

無論如何謝謝你 –

1

我不是100%確定你要做什麼,但我們走吧通過一些選項。

你的正則表達式:/\.([^\.]*)/g

(小提示:你不需要反斜槓字符類[ .. ].的前面,因爲.失去它的特殊含義存在的話)

首先:匹配一個正則表達式原則上是一個布爾測試:「這個字符串是否匹配這個正則表達式」。你可能能夠得到的關於字符串的哪部分與正則表達式的哪部分相匹配的其他信息完全取決於正在使用的任何環境中正則表達式的特定實現。所以,你的問題本質上取決於實現。

但是,在最常見的情況下,匹配嘗試確實會提供額外的數據。你幾乎總是得到匹配整個正則表達式的子字符串(在Perl 5中,它顯示在$&變量中)。在Perl5兼容的正則表達式中,如果用正確的括號括住了正則表達式的一部分,您還需要添加匹配每個集合的子字符串(在Perl 5中,它們被放置在$1,$2等中)。因此,正如您所寫,正則表達式通常會爲您提供兩個單獨的結果:整個匹配的「.ns1」,「.ns2」等,以及「ns1」,「ns2」等。爲子組匹配。你不應該改變表達式來獲得後者的值;只是改變你如何訪問比賽結果。然而,如果你想要,並且你的正則表達式引擎支持它們,你可以使用某些特性來確保整個正則表達式只匹配你想要的部分。一個這樣的機制是向後看。正回顧後纔會東西的回顧後表達式匹配後匹配:

/(?<\.)([^.]*)/ 

,將符合非週期的任何序列,但只有當他們來了一段時間後。