[英]How to match any symbol including a line terminator?
我有一個文本“文本abc”。 當我使用“(。+)abc”模式時,我找到了一個匹配的“文本”,沒關系。 但是,如果我使用第二個模式“([.. {1,})abc”,則匹配器找不到任何匹配項。 為什么?
我想使用大括號[],因為我還想使用換行符(例如,現在我無法將“ text \\ n abc”與第一個模式匹配)。
對不起,我的英語不好
另請參見DOTALL模式: https ://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#DOTALL
我的代碼:
String text = "text abc";
Pattern pattern = Pattern.compile("(.+) abc");
Matcher m = pattern.matcher(text);
while (m.find()) {
System.out.println(m.group(1));
}
PS:我的目標是使用“([..n] {1,})abc”模式。
目前尚不清楚您要匹配的內容,但是如果我正確理解您的問題是“ text \\ n abc”。 那是因為換行來解決這個問題
Pattern pattern = Pattern.compile("(.+) abc", Pattern.DOTALL);
“。”的Pattern.DOTALL標志。 甚至匹配\\ r或\\ n。
現在,模式([.\\n]{1,}) abc
相當倒退。 首先, {1,}
與+
相同,因此此模式實際上是([.\\n]+) abc
。 其次,如Oracle regex教程所述:
注意:在某些情況下,上面列出的特殊字符將不被視為元字符。
在這種情況下[.]
.
不再是正則表達式元字符。 您可以通過針對字符串"test . abc"
測試模式來驗證這一點,該字符串將對"."
分組"."
。
要啟用DOTALL
標志,只需將參數添加到正則表達式中,或者您可以將選項添加為參數:
Pattern pattern = Pattern.compile("(?s)(.+) abc")
Pattern pattern = Pattern.compile("(.+) abc", Pattern.DOTALL)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.