2014-10-02 110 views
0

我跟隨this tutorial正則表達式與特殊字符匹配

當我想測試我的正則表達式(方法轉儲是從linqpad到控制檯上顯示):

Regex.Match("a^7lowah", @"\ba\w*\b").Success.Dump(); 

應該匹配開頭的單詞都以「一」和滿足x字母數字字符的數量到單詞的末尾。

但不幸的是,上面的正則表達式匹配。

我的正則表達式的理解:

  • 「\ B」(開始的詞)
  • 「一」(只是字母A)
  • 「\ W」(字母數字字符)
  • 「*」(重複之前的術語)
  • 「\ b」(這個詞的結尾)

我在做什麼錯?

+0

這真的很奇怪,你的正則表達式沒有錯,它不應該匹配。 – 2014-10-02 09:42:54

+0

你應該說明你爲什麼不希望這場比賽取得成功。是因爲領先的'a'後面是'^'而不是空格?是因爲你想讓整個輸入必須與輸出匹配嗎?是因爲「a」後面跟着0,而不是1個或更多的其他字母? – Rawling 2014-10-02 09:58:41

回答

4

是的,正則表達式會匹配。

Pattern: \ba\w*\b 
String: a^7lowah 

*表示「0或更多」。

因此,這將是比賽:

enter image description here

正如你所看到的,沒有單詞字符匹配,但因爲你量化「零個或多個」沒關係 - 我們的指針跳過構造的那部分,並且已經可能聲明一個字邊界。

您可能想要將*更改爲+

閱讀也:

+0

+1,你不僅更快,而且你的回答更好地描述了OP的問題。 – 2014-10-02 09:53:21

+0

謝謝,將「*」更改爲「+」的作品!這確實與a相匹配。因爲它認爲「^」是單詞的結尾。 – Jamie 2014-10-02 09:53:29

1

它只匹配你的字符串的a

由於a是一個單詞字符,而^不是一個單詞字符,它們之間的空字符串定義了單詞邊界。 (對於\b

在你的情況下,a是匹配的,因爲如上所述,它直接跟隨邊界字。原因是*匹配前一個標記的零個或多個字符。

請參閱here

取決於如果您的x應該是1個或更多個令牌而不是0個或更多個令牌,則需要更改爲\ba\w+\b

+4

既然'a'是一個單詞字符,'^'不是一個單詞字符,它們之間的空字符串定義了單詞邊界。 – nhahtdh 2014-10-02 09:51:39

+0

@nhahtdh我可以編輯這個答案?謝謝你讓我知道 – 2014-10-02 09:58:18

+0

@PhilippM:繼續 – nhahtdh 2014-10-02 09:59:20

1

問題不在於你的正則表達式,而在於你對成功的解釋。正則表達式僅匹配「a」,但這仍然是匹配,成功將是真實的。

+0

我剛剛注意到了這一點,我不知道它會計算一個特殊字符(在這種情況下「^」作爲一個單詞的結尾,所以一個匹配。使用:在het開始和$在正則表達式的結尾,然後它的工作就好了。 – Jamie 2014-10-02 09:49:51

相關問題