代码之家  ›  专栏  ›  技术社区  ›  Pure.Krome

试图将这一行Java理解为C代码

  •  4
  • Pure.Krome  · 技术社区  · 13 年前

    请参阅以下java代码:-

    s = s.replaceAll( "\\\\", "\\\\\\\\" ).replaceAll( "\\$", "\\\\\\$" );

    很抱歉我不明白。这是一个regex替换所有。

    我试过下面的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);
    }
    

    隐马尔可夫模型。。。

    4 回复  |  直到 13 年前
        1
  •  3
  •   Kobi    13 年前

    Java需要所有 $ 替换字符串中转义的符号- "\\\\\\$" 方法 \\ \$ . 如果没有它,就会抛出一个错误: http://www.regular-expressions.info/refreplace.html (查找“$(未转换为文字的美元)”。

    记得 $1 , $0 etc被捕获的组替换为文本,因此在 replaceAll . C# 有一个稍微不同的语法,不需要额外的斜杠,它采取字面上。

    你可以写:

    text = text.RegexReplace(@"\\", @"\\");
    text = text.RegexReplace(@"\$", @"\$");
    

    或者,

    text = text.RegexReplace(@"[$\\]", @"\$&");
    
        2
  •  1
  •   Gabe Timothy Khouri    13 年前

    我认为这相当于C代码:

    text = text.Replace(@"\", @"\\"); 
    text = text.Replace("$", @"\$");
    

    这个 @ 表示C#中的逐字字符串,这意味着字符串中的反斜杠不必用更多的反斜杠转义。换句话说,代码用双反斜杠替换单个反斜杠,然后用反斜杠后跟反斜杠替换dollarsign。

    如果要使用regex函数,它应该如下所示:

    text = text.RegexReplace(@"\\", @"\\"); 
    text = text.RegexReplace(@"\$", @"\$$");
    

    注意,在regex模式(第一个参数)中,反斜杠是特殊的,而在替换模式(第二个参数)中,反斜杠是特殊的dollarsigns。

        3
  •  -1
  •   lijie    13 年前

    代码引用原始字符串中的反斜杠和“$”字符。

        4
  •  -1
  •   DGH    13 年前

    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语言版本中取出一半。