簡體   English   中英

Java中的正則表達式:如何引用“匹配模式”?

[英]Regular Expression in Java: How to refer to “matched patterns”?

我正在閱讀Java正則表達式教程,似乎只是在教您測試模式是否匹配,但沒有告訴我如何引用匹配的模式。

例如,我有一個字符串“我的名字是xxxxx”。 而且我想打印xxxx。 我將如何使用Java正則表達式來做到這一點?

謝謝。

您正在閱讀什么教程? 太陽是一個非常徹底解決這個問題的人,但是您必須正確閱讀它:)

捕獲字符串的一部分是通過括號完成的。 如果要捕獲字符串中的組,則必須將正則表達式的這一部分放在括號中。 按括號顯示的順序定義組,索引為0的組代表整個字符串。

例如,正則表達式“ Day([0-9] +)-Note([0-9] +) ”將定義3個組:

  • group(0) :整個字符串
  • group(1) :正則表達式中的第一個組,即天數
  • group(2) :正則表達式中的第二個組,即音符編號

至於實際的代碼以及如何檢索您在正則表達式中定義的組,請查看Java文檔,尤其是Matcher類及其組方法: http : //java.sun.com/j2se/1.5。 0 / docs / api / java / util / regex / Matcher.html

您可以使用該非常有用的工具來測試正則表達式: http : //www.cis.upenn.edu/~matuszek/General/RegexTester/regex-tester.html

希望這會有所幫助,干杯

請注意模式和Matchergroup()方法中括號的使用

import java.util.regex.*;

public class Example {
    static public void main(String[] args) {
        Pattern regex = Pattern.compile("My name is (.*)");
        String s = "My name is Michael";
        Matcher matcher = regex.matcher(s);

        if (matcher.matches()) {
            System.out.println("original string: " + matcher.group(0));
            System.out.println("first group: " + matcher.group(1));
        }
    }
}

輸出為:

original string: My name is Michael
first group: Michael

您可以使用Matcher group(int)方法:

 Pattern p = Pattern.compile("My name is (.*)");
  Matcher m = p.matcher("My name is akf");
  m.find();
  String s = m.group(1); //grab the first group*
  System.out.println(s);

輸出:

akf

*查看匹配組

Matcher m = Pattern.compile("name is (.*)").matcher("My name is Ross");
if (m.find()) {
  System.out.println(m.group(0));
  System.out.println(m.group(1));
}

父母組成了一個俘虜小組 組0是整個模式,組1是反向引用

上面的程序輸出:

name is Ross
Ross

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM