我有以下的正則表達式是一個字符串模式匹配:Java的正則表達式:提前刪除(雙)負的外觀和向後看
(?i)(?<![^\\s\\p{Punct}])
:看後面
(?![^\\s\\p{Punct}])
:向前看
下面是演示我如何使用它的例子:
public static void main(String[] args) {
String patternStart = "(?i)(?<![^\\s\\p{Punct}])", patternEnd = "(?![^\\s\\p{Punct}])";
String text = "this is some paragraph";
System.out.println(Pattern.compile(patternStart + Pattern.quote("some paragraph") + patternEnd).matcher(text).find());
}
它返回true
預計重SULT。然而,由於regex
使用雙負(即負面前瞻/後面和^
),我認爲消除兩個否定應返回相同的結果。於是,我試着用下面的:
String patternStart = "(?i)(?<=[\\s\\p{Punct}])", patternEnd = "(?=[\\s\\p{Punct}])";
然而,它似乎並沒有被工作正常。我甚至嘗試在(方括號內)末尾添加^
和/或$
以匹配字符串的開始/結束,但仍然沒有運氣。
是否可以將這些regexes
轉換爲正面查找?
'(?= [\\ s \\ p {Punct}])''與'(?![^ \\ s \\ p {Punct}]')不一樣' – anubhava
兩個否定結果爲肯定。但是,如果使用否定字符類來排除超類的子類,則需要小心。例子'[^ \ P {Punct} ,.]'另外,請注意,使用兩個底片具有傳遞錨點的隱藏優勢。所以一個空白邊界將是'(?<!\ S)'和'(?!\ S)' – sln