繁体   English   中英

如何使用Java在正则表达式中转义星号

[英]how to escape asterisk in regex using java

我有以下模式:

<* ab: cdef *>
<************>
abc: <starting now>

我需要转义具有<*模式的行。

我已经使用\\\\*\\\\\\\\*来转义\\和*。 但这行不通

如何使用Java在正则表达式中转义*?

我无法逃避单独有<的行,因为其他行也会被跳过。

我用下面的代码:

if(str.matches("<\\*.*")) {
                //Do nothing.
}

通过使用BufferedReader初始化str,如下所示:

FileInputStream fstream = new FileInputStream(filename);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String str = br.readLine(); 

要在正则表达式中转义* ,您需要双反斜杠: \\\\*因为*是正则表达式中的特殊字符。

您也可以尝试这样做(如果您希望这种模式出现在行的开头,如您的示例所示):

if (str.trim().startsWith("<*")) {
    //your code
}

因此,如果您希望模式出现在字符串中的任何位置,则可以使用:

if (str.contains("<*")) {
    //your code
}

而且我很确定在这些简单的情况下您不需要正则表达式。

您还应该在'<'字符前匹配空格,例如

if(str.trim().matches("<\\*.*")) {
            //Do nothing.
}

str.matches("\\\\s*<\\\\*.*")

您还应该迭代阅读下一行,例如:

while ((str = br.readLine()) != null) { 

    if(str.trim().matches("<\\*.*")) {
            //Do nothing.
    } else {
            //else do something...
    }
}

(在OP中不清楚)

可能认为该模式不匹配,因为调试器无法在空的if块内停止- 不执行任何操作始终是一个坏习惯: 执行某些操作

您的模式已经符合以下情况:

String str = "<* ab: cdef *>";
if(str.matches("<\\*.*")) {
    //do something
    System.out.println("matches");
}

上面的照片匹配

如果您不希望考虑多余的前导空格,则可以使用此模式" *<\\\\*.*" ,该模式匹配零个或多个前导空白字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM