我想匹配包含在兩個字符串中的如下任何東西:如何匹配兩個字符串之間的任何內容?
teststring = %-12x (my value)
模式:
%-(.*?)x (my value)
的結果應該是:
12
但正則表達式不起作用。爲什麼?
我想匹配包含在兩個字符串中的如下任何東西:如何匹配兩個字符串之間的任何內容?
teststring = %-12x (my value)
模式:
%-(.*?)x (my value)
的結果應該是:
12
但正則表達式不起作用。爲什麼?
你在你的正則表達式(而不是5月我)有一個錯字,你需要躲避()
:
String s = "%-12x (may value)";
Matcher m = Pattern.compile("%-(.*?)x \\(may value\\)").matcher(s);
if (m.find() && m.groupCount() >= 1) System.out.println(m.group(1)); //12
謝謝你的工作,除了像'% - % - % - 12x'這樣的幾個開始字符串,我只想從最新的'%-'匹配。但目前它找到第一個.. – membersound
如何:'m.group(m.groupCount())'? – assylias
謝謝。是否也可以只替換找到的組(數字)? 'pattern.matcher(s).replaceAll(「100」);'將會替換完整的內容'%-12x(我的值)',而不僅僅是數字。 – membersound
正則表達式不起作用,因爲(
和)
是需要轉義元字符:
%-(.*?)x [(]my value[)]
沒有[]
或\
的引擎將它們作爲第二個捕獲組,它始終「抓住」 "my value"
標記一旦成功比賽。
如果你想作適當的正則表達式爲replaceAll
,除去捕獲組,並使用%-
和x [(]my value[)]
作爲先行的一部分,並回顧後:
String s = "%-12x (my value)";
String r = s.replaceAll("(?<=%-).*?(?=x [(]my value[)])", "quick brown fo");
System.out.println(r); // prints "%-quick brown fox (my value)"
謝謝,這是有效的,因爲它找到了完整的內容作爲匹配,不僅是數字'12', – membersound
@membersound您必須提取捕獲組。 –
@membersound獲取第一個[捕獲組](http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#group())將'12'拉出通過調用match.group(1)'來匹配。 – dasblinkenlight
看來, '?'是不需要的,因爲用'*'表示你必須有零個或更多的任何字符。
應該是這樣的%-(.*)x
。
'my' VS'may'逃到'('和')'。 –
使用https://regex101.com/進行測試。 「包含在兩個字符串中」 –
「哪些字符串? – 2015-05-29 14:40:23