匹配&&和||特殊字符

时间:2015-06-02 12:49:29

标签: java regex lucene

我正在编写一个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);

请告诉我如何完全匹配输入文本中的&&||

2 个答案:

答案 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)

使用以下内容:

Pattern pattern = Pattern.compile("[|]{2}|&&");

请参阅Ideone Demo