當我想測試我的正則表達式(方法轉儲是從linqpad到控制檯上顯示):
Regex.Match("a^7lowah", @"\ba\w*\b").Success.Dump();
應該匹配開頭的單詞都以「一」和滿足x字母數字字符的數量到單詞的末尾。
但不幸的是,上面的正則表達式匹配。
我的正則表達式的理解:
- 「\ B」(開始的詞)
- 「一」(只是字母A)
- 「\ W」(字母數字字符)
- 「*」(重複之前的術語)
- 「\ b」(這個詞的結尾)
我在做什麼錯?
當我想測試我的正則表達式(方法轉儲是從linqpad到控制檯上顯示):
Regex.Match("a^7lowah", @"\ba\w*\b").Success.Dump();
應該匹配開頭的單詞都以「一」和滿足x字母數字字符的數量到單詞的末尾。
但不幸的是,上面的正則表達式匹配。
我的正則表達式的理解:
我在做什麼錯?
是的,正則表達式會匹配。
Pattern: \ba\w*\b
String: a^7lowah
*
表示「0或更多」。
因此,這將是比賽:
正如你所看到的,沒有單詞字符匹配,但因爲你量化「零個或多個」沒關係 - 我們的指針跳過構造的那部分,並且已經可能聲明一個字邊界。
您可能想要將*
更改爲+
。
閱讀也:
+1,你不僅更快,而且你的回答更好地描述了OP的問題。 – 2014-10-02 09:53:21
謝謝,將「*」更改爲「+」的作品!這確實與a相匹配。因爲它認爲「^」是單詞的結尾。 – Jamie 2014-10-02 09:53:29
它只匹配你的字符串的a
。
由於a
是一個單詞字符,而^
不是一個單詞字符,它們之間的空字符串定義了單詞邊界。 (對於\b
)
在你的情況下,a
是匹配的,因爲如上所述,它直接跟隨邊界字。原因是*
匹配前一個標記的零個或多個字符。
請參閱here。
取決於如果您的x
應該是1個或更多個令牌而不是0個或更多個令牌,則需要更改爲\ba\w+\b
。
問題不在於你的正則表達式,而在於你對成功的解釋。正則表達式僅匹配「a」,但這仍然是匹配,成功將是真實的。
我剛剛注意到了這一點,我不知道它會計算一個特殊字符(在這種情況下「^」作爲一個單詞的結尾,所以一個匹配。使用:在het開始和$在正則表達式的結尾,然後它的工作就好了。 – Jamie 2014-10-02 09:49:51
這真的很奇怪,你的正則表達式沒有錯,它不應該匹配。 – 2014-10-02 09:42:54
你應該說明你爲什麼不希望這場比賽取得成功。是因爲領先的'a'後面是'^'而不是空格?是因爲你想讓整個輸入必須與輸出匹配嗎?是因爲「a」後面跟着0,而不是1個或更多的其他字母? – Rawling 2014-10-02 09:58:41