正则表达式可选组|一开始不工作

时间:2014-12-12 22:12:09

标签: java regex

我可以有两种输入字符串:

  1. text1
  2. text1|text2
  3. 我想打印输出字符串:text1-text2

    我试过这个:

    System.out.println("A|B".replaceAll("(.+)\\|(.+)?",     "$1-$2")); // I expect A-B
    System.out.println("A|" .replaceAll("(.+)\\|(.+)?",     "$1-$2")); // I expect A-
    System.out.println("A"  .replaceAll("(.+)(\\|(.+))?",   "$1-$3")); // I expect A-
    System.out.println("A|B".replaceAll("(.+)(\\|(.+))?",   "$1-$3")); // I expect A-B    
    

    使用以下输出:

    A-B
    A-
    A-
    A|B-
    

    在上一次发生时我做错了什么?

2 个答案:

答案 0 :(得分:1)

"A|B".replace('|', '-');怎么样 - 没有理由在这里使用RegEx。

答案 1 :(得分:1)

.+捕获所有内容但是换行符。由于第二组是可选的,因此它将捕获A|B

因此$1将为A|B,而$2$3将为空。

您需要使用

(.+?)(\\|(.+))?

为了让它发挥作用。 ?表示尽可能少

DEMO