簡體   English   中英

Java正則表達式匹配兩個相同的數字

[英]Java regular expression match two same number

我想使用RE來匹配如下所示的文件路徑:

../90804/90804_0.jpg
../89246/89246_8.jpg
../89247/89247_14.jpg

目前,我使用以下代碼進行匹配:

Pattern r = Pattern.compile("^(.*?)[/](\\d+?)[/](\\d+?)[_](\\d+?).jpg$");
Matcher m = r.matcher(file_path);

但我發現這將是意外的匹配,例如:

../90804/89246_0.jpg

RE中是否不可能匹配兩個相同的數字?

您可以將此正則表達式與捕獲組和相同的反向引用一起使用:

(\d+)/\1

正則演示

等效的Java正則表達式字符串為:

final String regex = "(\\d+)/\\1";

細節:

  • (\\d+) :匹配1+個數字並將其捕獲到組#1中
  • / :數學文字/
  • \\1 :使用后向引用#1,匹配與組#1相同的數字

您可以在此處使用\\2反向引用而不是第二個\\d+

s.matches("(.*?)/(\\d+)/(\\2)_(\\d+)\\.jpg")

參見regex演示 請注意,如果使用matches方法,則不需要^$錨。

細節

  • (.*?) -組1:除換行符以外的任何0+個字符都盡可能少
  • / -斜線
  • (\\\\d+) -第2組:一個或多個數字
  • / -斜線
  • (\\\\2) -第3組:與第2組相同的值
  • _下划線
  • (\\\\d+) -第4組:一位或多位數字
  • \\\\.jpg - .jpg

Java演示

Pattern r = Pattern.compile("(.*?)/(\\d+)/(\\2)_(\\d+)\\.jpg");
Matcher m = r.matcher(file_path);
if (m.matches()) {
    System.out.println("Match found");
    System.out.println(m.group(1));
    System.out.println(m.group(2));
    System.out.println(m.group(3));
    System.out.println(m.group(4));
}

輸出:

Match found
..
90804
90804
0

此regEx ^(.*)\\/(\\d+?)\\/(\\d+?)_(\\d+?)\\.jpg$

匹配這樣的st:

../90804/90804_0.jpg
../89246/89246_8.jpg
../89247/89247_14.jpg

分為4部分

參見示例結果:

在此處輸入圖片說明

暫無
暫無

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

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