[英]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.