2011-11-20 79 views
11

如何創建開始匹配的正則表達式如何匹配啓動索引處的正則表達式?

換句話說:

什麼是\A它說,「比賽在搜索的開始,即使它不是在主字符串的開頭相當於」?

new Regex(@"\A\n").IsMatch("!\n", 1); // Should be true, but is false 
+0

@NullUserExceptionఠ_ఠ:我將會在很長的一段時間內做這件事,所以這會非常昂貴。 – Mehrdad

回答

13

什麼你要找的是\G

new Regex(@"\G\n").IsMatch("!\n", 1); // It's twue, it's twue! 

這是一個讓我吃驚,其實。我知道\G,但它通常被描述爲匹配輸入開始或最近成功匹配結束的錨點,這兩者在這裏都不適用。如果這是一個.NET創新,他們應該更多地討論它;它看起來可能非常方便。

編輯:想想吧,Java的find(int)確實以同樣的方式工作 - 我甚至已經廣泛使用它。但後來他們在Java 5中添加了「regions」API,它提供了更好的控制,並且我忘記了這個習慣用法。我從來沒有想過在.NET中尋找它。

+0

我不能相信這是真的! +1 – Mehrdad

+0

+1哇,你找到它了!從[.NET 1.1](http://msdn.microsoft.com/en-us/library/h5181w5w(v = VS.71).aspx) – NullUserException

3

OOOOH我剛剛想起一件事我讀到〜4 - 5年前在關於Regex.Match一本書......

的重載不規矩我們希望他們的方式!

超載

Regex.Match(string input, int index, int length) 

指定搜索,而過載

Regex.Match(string input, int index) 

只是決定在搜索應該開始一個

(它省去了一個案例開始在任意位置在,我猜。)

希望這是啓發人們...

+0

+1開始,它看起來就已經存在了。是的,結果是新的正則表達式(@「\ A \ n」)匹配(「!\ n」,1,2)。成功也是雙重的。那些棘手的小惡魔! –