2012-08-27 64 views
0

我寫了一些正則表達式代碼。我如何只能搜索第一個實例 該字符串出現在文本中。例如,如果我要搜索出現在文本第一 號(我不關心其他的數字,我不希望他們 高亮顯示),我怎麼指定的正則表達式?指定首次出現在正則表達式

我正在寫原始正則表達式代碼並在線測試人員測試它們,如 Rubular.com和regexpal.com。

+2

這也不是沒有可能告訴我們的語言/編輯等你與此正則表達式使用它來回答。 – Peter

回答

1

那是怎樣的正則表達式的作品在默認情況下,你通常要提供一個全球性的選項或使用特定功能找到的所有比賽。

因此,如果您要使用正則表達式\d+查找一個或多個數字,則正則表達式引擎只會匹配第一組數字(第一個數字)。

請注意,如果您使用的在線工具或文本編輯器,而不是一門編程語言,因此,如果這沒有幫助,請註明您是如何執行你的正則表達式搜索,這可能並非如此。

您可以使用下面的正則表達式來獲得第一個捕捉組中的第一個數字,而且不能和別的:

^[^\d]*(\d+) 

說明:

^   # start of string 
[^\d]* # match zero or more non-digit characters 
(\d+)  # match one or more digits and place them in the first capture group 
+0

你在測試中使用什麼?例如在Python中,'re.search(r'\ d +',s)'會在字符串's'中找到第一個數字。如果您使用的是在線工具或文本編輯器,則可能會隱式執行全局搜索。請參閱以下鏈接中的示例:http://regexr.com?31v8t(請注意這是如何發生變化的時候,你點擊'global'複選框) –

+1

這樣的在線工具,經常會發現所有的比賽沒有給你一個選擇只搜索第一次匹配,但只發現第一次匹配是編程語言中大多數(如果不是全部的話)regex實現的默認行爲。如果你是不是使您的正則表達式的編程語言規劃和你只是使用的在線工具,看看他們是如何工作的,你可以使用'^ [^ \ d] *(\ d +)'得到的第一個數字第一個捕獲組,不匹配其他任何東西。 –

+0

@FJ你能解釋你的代碼是如何工作的嗎? – Dombey

0

Most Regex tools, which use regex-directed engines, always return the leftmost match.

的正則表達式引擎始終返回最左邊的匹配,因爲 引擎「渴望」r報道一場比賽。超過這一點,引擎永遠不會進行 以查看是否有任何「更好」匹配。第一個 匹配被認爲是足夠好的。

但是使用正則表達式引擎(如Notepad ++,EditPad和其他數以百萬計的其他工具)的工具會將其配置爲突出顯示所有匹配項。 (這對於文本編輯器是有意義的)(這對大多數在線正則表達式測試者也是如此)。

要解決您的問題,如果您使用的是正則表達式庫(例如.NET Regex庫),則可以使用Regex.Match獲取第一個匹配的出現次數。
對於e.g,在C#:

string regexPattern = "\d"; 
string inputText = @"Ka3jf7we8ewdv"; 
Regex r = new Regex(regexPattern); 
Match m = r.Match(inputText); 
Console.WriteLine(m.Value); 
+0

'm.Groups [1] .Value'沒有意義,因爲您的正則表達式中沒有捕獲組。你想要整個比賽,這只是'm.Value'。 –

+0

你是對的..我用前面的例子跳了槍。修復。 – Kash

相關問題