2009-11-23 115 views
1

正則表達式的樂趣...正則表達式匹配部分的字符串再次

就拿http://something.com/en/page

我想測試一個精確匹配上/ EN /包括斜線,否則它會匹配「 en'來自字符串的其他部分。

我確定這很容易,對於除我以外的人!

編輯:

我使用它的string.match()在JavaScript

+1

有關的編程語言,你需要的正則表達式? C#和VB.net,例如都明白'「/ en /」',但這顯然不是你正在尋找的...... – Heinzi 2009-11-23 18:59:25

+0

@Heinzi - JavaScript有定義一個正則表達式的速記方式,例如var someRegex =/\/en \ // ig,它也可以像這樣寫var someRegex = new RegExp(「/ en /」,「ig」)。速記方式通常是優選的。我只使用新的RegExp,如果我需要通過串聯字符串來構建正則表達式。 – nickytonline 2009-11-23 19:15:55

回答

3

那麼這真的取決於編程語言將執行正則表達式,但實際正則表達式是簡單

/en/ 

對於.Net,以下代碼正常工作:

string url = "http://something.com/en/page"; 

bool MatchFound = Regex.Match(url, "/en/").Success; 

以下是JavaScript版本:

var url = 'http://something.com/en/page'; 
if (url.match(/\/en\//)) { 
    alert('match found'); 
} 
else { 
    alert('no match'); 
} 

DUH

謝謝Welbog和克里斯·巴蘭斯,以使什麼應該是最明顯的一點。這不需要正則表達式來解決。它只是一個包含聲明。正則表達式只能用在需要的地方,應該是我的第一個考慮因素,而不是最後一個。

+0

完美,謝謝..我在逃避我的斜線時遇到了問題。 – Ben 2009-11-23 19:22:08

+2

使用'regex.test()'比'string.match()'花費更少' – James 2009-11-23 20:52:00

+3

使用簡單的String.Contains(「/ en /」)比使用Regex更省錢... – 2009-11-23 22:06:37

1

任何理由/en/是行不通的?

+0

這是行不通的,因爲斜槓是正則表達式的組成部分,因此需要根據Parappa的回答來逃避它,因爲斜槓通常用作正則表達式的指示符,在大多數posix兼容系統(如unix)中,會有額外的信息提供,例如搜索忽略大小寫字符串將/ some_string /我。 – t0mm13b 2009-11-23 19:01:10

+0

而且它基於什麼編程語言,請參閱TheLameDuck的答案。絕對是C#,你需要避開正斜槓。 – t0mm13b 2009-11-23 19:02:20

+0

雖然我很欣賞這些榮譽,但它只是反斜槓\才需要被轉義。 另外,如果出現問題,您可以隨時迴避整個問題,例如:string test =#「my back \ slash」; – 2009-11-23 19:04:22

2

您可能需要逃避正向斜線...

/\/en\// 
+0

只要做一個字符串匹配,正則表達式對於這種情況是矯枉過正的。 – 2009-11-23 22:08:06

5

如果你想爲特別地匹配/en/,你並不需要一個正則表達式的。只需使用您的語言相當於contains來測試該子字符串。

如果你想匹配的兩條斜線之間的URL中的任意兩個字母的一部分,你需要這樣的表達式:

/../ 

如果你想要捕捉的兩個字母的代碼,封閉期間括號:

/(..)/ 

根據你的語言,你可能需要逃避斜線:

\/..\/ 
\/(..)\/ 

如果你想確保你匹配字母代替任何字符(包括數字和符號),您可能希望使用表達式像這個:

/[a-z]{2}/ 

這將大多數正則表達式的變化來識別。

同樣,你可以逃避斜線,並添加一個捕獲組是這樣的:

\/([a-z]{2})\/ 

如果你不需要逃避他們:

/([a-z]{2})/ 

這個表達式將匹配任何字符串形式爲/xy/,其中xy是字母。所以它會匹配/en//fr//de/

在JavaScript中,您將需要轉義版本:\/([a-z]{2})\/

+1

+1指出Regexps對於精確匹配不是必需的。 – Heinzi 2009-11-23 19:32:55

0

你並不需要爲這個正則表達式:

location.pathname.substr(0, 4) === "/en/" 

當然,如果你堅持使用正則表達式,使用:

/^\/en\//.test(location.pathname)