[英]Regular expression matches an incomplete expression
我想寫正則表達式來識別電視連續劇; 我正在用Java執行此操作。 標題是這樣寫的:
Title 2x05
其中2是季節,5是情節; 所以我用這個表達式:
\d*x\d*
它的工作原理非常好,除非標題中包含一個或多個“ x”字符; 在這種情況下,我恰好在此字符上有一個匹配項,從而導致明顯的問題。 有什么辦法可以避免這種情況?
您是否要在季節和劇集之間匹配任意數量的x
? 如果是,請嘗試
\d+x+\d+
使用+
而不是*
來確保季節和劇集至少有一位數字,並且之間至少要有一個x
。
這個怎么樣?
[0-9]{1,2}x[0-9]{1,3}
假設不超過99個季節,每個季節不超過999集。
嘗試使用此表達式代替“ \\d+x\\d+
”。
請注意, +
字符將匹配一個或多個前面的標記(一個數字),而*
字符將匹配零個或多個前面的標記。
您甚至可以使用組來同時檢索季節和劇集信息:
Pattern pattern = Pattern.compile(".*(\\d+)x(\\d+).*");
Matcher matcher = pattern.matcher("Series 2x08");
if (matcher.matches()) {
int season = Integer.parseInt(matcher.group(1));
int episode = Integer.parseInt(matcher.group(2));
System.out.printf("Season %d, Episode %d", season, episode);
}
結果:第2季,第8集
嘗試這個:
\\d+x\\d+
+
:1個或更多
*
:0或更大
?
:1或根本不
但是請記住,這並不是測試您的情況的最可靠的方法。 如果有人輸入99x9999999,則將是第99季和9999999集。 如果您想限制可能的季節和劇集的數量, 請點擊此處 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.