Java 开始或结束为空时正则表达式不匹配
这是我的正则表达式,因为我已经将它输入到我的java文件中Java 开始或结束为空时正则表达式不匹配,java,regex,string,Java,Regex,String,这是我的正则表达式,因为我已经将它输入到我的java文件中 String myRegex = "(?<=[^a-zA-Z0-9])(target)(?=[^a-zA-Z0-9])"; 如果我有一个字符串,如下所示: .目标它起作用了 但是,如果我有一个字符串,它只说target,那么它不起作用。如何修改正则表达式,以便在字符串的开头或结尾没有任何内容时仍然匹配 编辑示例 _目标-应该成功 目标-应该成功 目标-应该成功 目前,这些示例在当前正则表达式中失败。如果我正确理解了您的问题,您可
String myRegex = "(?<=[^a-zA-Z0-9])(target)(?=[^a-zA-Z0-9])";
如果我有一个字符串,如下所示:
.目标它起作用了
但是,如果我有一个字符串,它只说target,那么它不起作用。如何修改正则表达式,以便在字符串的开头或结尾没有任何内容时仍然匹配
编辑示例
_目标-应该成功
目标-应该成功
目标-应该成功
目前,这些示例在当前正则表达式中失败。如果我正确理解了您的问题,您可以使用?指示目标前后应有0或1个非字母或数字字符
([^a-zA-Z0-9])?(target)([^a-zA-Z0-9])?
您应该能够使用*0或更多量词匹配目标,以匹配任何出现了0或更多所需字符的目标。因此:
[_]*(target)[_]*
应匹配:
_target
target
target_
_target_
在括号中添加您希望在单词前后匹配的任何元素。要匹配的示例。目标。也是:
这将匹配目标子字符串,无论它是字符串的哪一部分。如果要使规则仅用于字符串开头的匹配,请向其添加^anchor,如下所示:
^[\._]*(target)[\._]*
只有在字符串开始时,才会与上面提到的匹配。问题是,这里出现了两个否定。我的外表可以是负面的,我的角色类别可以是负面的。目前,我的lookbehind是积极的,而我的角色类是消极的。所以它的意思是:回头看看,确保你找到了不在这些类中的东西。所以当你什么都没有的时候,它就找不到了,就会失败。解决办法是让我的“回头看”为负值,让角色类为正值。所以现在它是说,回头看看,确保没有这些角色。因此,如果它是空的,它不会失败,因为它满足条件 这是最后一个正则表达式:
String myRegex = "(?<![a-zA-Z0-9])target(?![a-zA-Z0-9])";
使用正则表达式替代项ie |将输入的开始添加到您的后视,并将输入的结束添加到您的前视,ie |是一个逻辑or:
String myRegex = "(?<=^|[^a-zA-Z0-9])target(?=[^a-zA-Z0-9]|$)";
正则表达式的问题是,后面的查找要求前面的字符不是字母/数字
这些环视图也匹配输入的开始/结束
请参阅。您需要创建一个正则表达式来匹配任何具有target的对象?不,它比这更具体。我需要一个与现有正则表达式完全相同的正则表达式,但也允许字符串的开头或结尾为空…..字符串的开头或结尾为空。。。。。您能展示一些示例字符串吗?@NoobEditor抱歉,我添加了一些示例no,因为如果我说htarget,它仍将与target匹配。这是因为问号的意思是可以或不可以。所以它忽略了它。使用lookbehind时,它不会匹配目标,因为它以h开头。哦,好的。所以你想让它在任何时候匹配目标,而不是被字母或数字包围?是的,我想,我只是想用一种简单的方法,将这个小的边缘大小写添加到我当前的正则表达式中。这可能会被认为有点古怪,但你有没有考虑过这样的事情?是一个简单的正则表达式测试器,如果对您有帮助的话。这很有道理,但我认为我的解决方案更干净。@ogen实际上,我同意:
String myRegex = "(?<=^|[^a-zA-Z0-9])target(?=[^a-zA-Z0-9]|$)";