gpt4 book ai didi

Java 正则表达式 : Remove (double) negative look ahead and look behind

转载 作者:行者123 更新时间:2023-11-30 06:50:28 28 4
gpt4 key购买 nike

我有以下将字符串与模式匹配的正则表达式:

(?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这是预期的结果。然而,正如regex使用双重否定(即否定前瞻/后瞻和 ^ ),我认为删除这两个否定应该返回相同的结果。所以,我尝试了以下方法:

String patternStart = "(?i)(?<=[\\s\\p{Punct}])", patternEnd = "(?=[\\s\\p{Punct}])";

但是,它似乎没有按预期工作。我什至尝试添加 ^和/或 $在(方括号的)末尾匹配字符串的开头/结尾,仍然没有运气。

是否可以转换这些regexes进行积极的查找?

最佳答案

是的,这是可能的,但它的效率比你所拥有的要低,因为在积极的环视中你需要使用交替:

String patternStart = "(?i)(?<=^|[\\s\\p{Punct}])", patternEnd = "(?=[\\s\\p{Punct}]|$)";
^^ ^^

(?<=^|[\\s\\p{Punct}])向后查找需要存在字符串开头 ( ^ ) 或 |空格或标点符号 ( [\\s\\p{Punct}] )。正向前瞻 (?=[\\s\\p{Punct}]|$)需要空格或标点符号,或字符串结尾。

如果您只是添加 ^$进入像 [\\s\\p{Punct}^] 这样的字符类和[\\s\\p{Punct}$] ,它们将被解析为文字插入符和美元符号。

关于Java 正则表达式 : Remove (double) negative look ahead and look behind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42910338/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com