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