正则表达式返回引用以匹配数字(或任何字符序列)与自身

时间:2017-01-30 13:18:39

标签: java regex

我遗漏了一些基本的东西。我有这个正则表达式(。*)= \ 1并且我使用它来匹配100 = 100并且它失败了。当我从正则表达式中删除后向引用并继续使用捕获组时,它会显示捕获的组为“100”。当我尝试使用后向引用时,为什么它不起作用?

package test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {

    public static void main(String[] args) {
        String eqPattern = "(.*)=\1";
        String input[] = {"1=1"};
        testAndPrint(eqPattern, input); // this does not work

        eqPattern = "(.*)=";
        input = new String[]{"1=1"};
        testAndPrint(eqPattern, input); // this works when the backreference is removed from the expr
    }

    static void testAndPrint(String regexPattern, String[] input) {
        System.out.println("\n Regex pattern is "+regexPattern);
        Pattern p = Pattern.compile(regexPattern, Pattern.CASE_INSENSITIVE);
        boolean found = false;
        for (String str : input) {
            System.out.println("Testing "+str);
            Matcher matcher = p.matcher(str);
            while (matcher.find()) {
                System.out.println("I found the text "+ matcher.group() +" starting at " + "index "+ matcher.start()+" and ending at index "+matcher.end());
                found = true;
                System.out.println("Group captured "+matcher.group(1)); 
            }

            if (!found) {
                System.out.println("No match found");
            }
        }
    }
}

当我运行它时,我得到以下输出

Regex pattern is (.*)=\1
Testing 100=100
No match found

 Regex pattern is (.*)=
Testing 100=100
I found the text 100= starting at index 0 and ending at index 4
Group captured 100 -->If the group contains 100, why doesnt it match when I add \1 above

2 个答案:

答案 0 :(得分:3)

你必须转义模式字符串。

String eqPattern = "(.*)=\\1";

答案 1 :(得分:0)

我认为你需要摆脱反斜杠。

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row">
      <div class="col-lg-12">
           <div id="myDiv">
               my div
              <button>Full Screen</button>
          </div>
      </div>
 </div>