2011-08-01 70 views
7

不能工作這一個,這相匹配的單星:正則表達式匹配反斜線星級

// Escaped multiply 
Text = Text.replace(new RegExp("\\*", "g"), '[MULTIPLY]'); 

但我需要它來搭配\*,我已經試過:

\\* 
\\\\* 
\\\\\* 

能」噸工作了,謝謝你的幫助!

回答

11

您當時已經接近,\\\\\\*本來可以做到的。

更好地利用逐字字符串,這使得它更容易:

RegExp(@"\\\*", "g") 

\\反斜槓(\\\\在一個正常的字符串)匹配,\*星號(\\*在一個正常的字符串)相匹配。

0

你的語法是完全錯誤的。它看起來更像Javascript而不是C#。

這工作得很好:

string Text = "asdf*sadf"; 

Text = Regex.Replace(Text, "\\*", "[MULTIPLY]"); 

Console.WriteLine(Text); 

輸出:

asdf[MULTIPLY]sadf 

要匹配\*你會使用該模式"\\\\\\*"

4

請記住,有兩個「級別」的逃跑。

首先,您正在爲C#編譯器轉義您的字符串,並且您還正在爲正則表達式引擎轉義字符串。

如果你想從字面上匹配"\*",那麼你需要爲正則表達式引擎同時轉義這兩個字符,否則它們意味着不同的東西。我們用反斜槓逃避這些,所以你會有"\\\*"

然後,我們必須轉義反斜槓才能將它們寫成文字字符串。這意味着用兩個反斜槓替換每個反斜槓:"\\\\\\*"

除了最後一部分,我們可以使用「逐字字符串」,其中不應用任何轉義。在這種情況下,您只需要第一次轉義的結果:@"\\\*"

+0

@Tim:匹配零個或多個反斜槓? – porges

+0

對不起,我混了起來。你是對的。 –