请参阅此java代码: -
s = s.replaceAll( "\\\\", "\\\\\\\\" ).replaceAll( "\\$", "\\\\\\$" );
我有点理解它。这是一个正则表达式取代所有。
我尝试过以下C#代码......
text = text.RegexReplace("\\\\", "\\\\\\\\");
text = text.RegexReplace("\\$", "\\\\\\$");
但如果我有以下单元测试: -
} ul[id$=foo] label:hover {
java代码返回:} ul[id\$=foo] label:hover {
我的c#代码返回:} ul[id\\\$=foo] label:hover {
所以我不确定我理解为什么我的c#代码会放入更多\
,主要是关于如何表示这些控制字符.. ??
所以,当我使用XXX的想法只使用text.Replace(..)
时,这是有效的。
例如
text = text.Replace("\\\\", "\\\\\\\\");
text = text.Replace("\\$", "\\\\\\$");
但我希望坚持使用RegEx ...尽量让它尽可能接近java代码。
正在使用的扩展方法是......
public static string RegexReplace(this string input,
string pattern,
string replacement)
{
return Regex.Replace(input, pattern, replacement);
}
嗯...
答案 0 :(得分:3)
Java需要在其替换字符串中转义所有$
个符号 - "\\\\\\$"
表示\\
和\$
。如果没有它,它会抛出一个错误:http://www.regular-expressions.info/refreplace.html(寻找“$(未转义的美元作为文字文本)”。)
请记住$1
,$0
等替换为带有捕获组的文本,因此replaceAll
的第二个参数的语法部分有一部分。 C#
的语法略有不同,并且不需要额外的斜杠,这需要字面上的。
你可以写:
text = text.RegexReplace(@"\\", @"\\");
text = text.RegexReplace(@"\$", @"\$");
或者,
text = text.RegexReplace(@"[$\\]", @"\$&");
答案 1 :(得分:1)
我认为这相当于这个C#代码:
text = text.Replace(@"\", @"\\");
text = text.Replace("$", @"\$");
@
表示C#中的逐字字符串,这意味着字符串中的反斜杠不必使用更多反斜杠进行转义。换句话说,代码用双反斜杠替换单个反斜杠,然后用反斜杠替换一个美元符号,后跟一个美元符号。
如果你要使用正则表达式函数,它将是这样的:
text = text.RegexReplace(@"\\", @"\\");
text = text.RegexReplace(@"\$", @"\$$");
请注意,在正则表达式模式(第一个参数)中,反斜杠是特殊的,而在替换(第二个参数)中,它是特殊的美元符号。
答案 2 :(得分:-1)
代码引用原始字符串中的反斜杠和“$”字符。
答案 3 :(得分:-1)
Java正则表达式解析:http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html
C#:http://msdn.microsoft.com/en-us/library/xwewhkd1.aspx
我认为在Java中,你必须使用\来转义\字符,但是在C#中,你没有。尝试在C#版本中取出一半\。