首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java regex :删除(双)负面,向前看,向后看

Java regex :删除(双)负面,向前看,向后看
EN

Stack Overflow用户
提问于 2017-03-20 17:37:12
回答 1查看 486关注 0票数 1

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

(?i)(?<![^\\s\\p{Punct}]):回头看

(?![^\\s\\p{Punct}]):展望未来

下面是一个演示如何使用它的示例:

代码语言:javascript
复制
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使用双重否定(即负面展望/后面和^),我认为删除这两个负数应该返回相同的结果。所以,我尝试了以下几点:

代码语言:javascript
复制
String patternStart = "(?i)(?<=[\\s\\p{Punct}])", patternEnd = "(?=[\\s\\p{Punct}])";

然而,它似乎并没有像预期的那样起作用。我甚至尝试在(方括号的)末尾添加^和/或$,以匹配字符串的开头/结尾,但没有成功。

是否有可能将这些regexes转换为积极的查找?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-20 17:39:54

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

代码语言:javascript
复制
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}$] )中,它们将被解析为文字插入符号和美元符号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42910338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档