我正在编写一个Lucene应用程序来匹配&&
(双&符号)和||
(或或双管道)。
我想编写一个正则表达式来匹配输入文本中&&
和||
的任何存在。
如果我写下面的内容,则只会匹配&&
而不是||
的存在与否。
String inputTextFromFile = "This text contains double ampersand &&, and double pipe || and can this be recognised ? ";
Pattern pattern = Pattern.compile("(?=&&)(?= ||)");
Matcher matcher = pattern.matcher(inputTextFromFile);
请告诉我如何完全匹配输入文本中的&&
或||
。
答案 0 :(得分:5)
你不需要任何正则表达式,String.contains
似乎就足够了:
String str1 = "|| and &&";
boolean hasDoublePipe = str1.contains("||");
System.out.println("Has Double Pipe : " + hasDoublePipe);
boolean hasDoubleAmp = str1.contains("&&");
System.out.println("Has Double Ampersand : " + hasDoubleAmp);
然后你可以检查两个布尔变量是否都是true
,这就是它的全部内容。
输出:
Has Double Pipe : true
Has Double Ampersand : true
修改强>:
如果您必须使用正则表达式检查,如果&&
OR ||
必须以任何顺序存在于给定字符串中,您可以使用此代码:
String str = "|| and &&";
String rx = "\\|{2}|&&";
Pattern ptrn = Pattern.compile(rx);
Matcher m = ptrn.matcher(str);
if (m.find()) {
System.out.println("The string has double pipe or ampersands!");
}
请参阅IDEONE demo
还有一个示例代码,当您有
时,它使用捕获组来覆盖您的方案代码:
String str = "&&";
String rx = "(&&.*\\|{2}|\\|{2}.*&&)|(\\|{2})|(&&)";
Pattern ptrn = Pattern.compile(rx);
Matcher m = ptrn.matcher(str);
if (m.find()) {
if (m.group(1) != null)
System.out.println("The string has double pipe and ampersands!");
else if (m.group(2) != null)
System.out.println("The string has double pipes!");
else if (m.group(3) != null)
System.out.println("The string has double ampersands!");
}
请参阅IDEONE demo
答案 1 :(得分:1)