Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 开始或结束为空时正则表达式不匹配_Java_Regex_String - Fatal编程技术网

Java 开始或结束为空时正则表达式不匹配

Java 开始或结束为空时正则表达式不匹配,java,regex,string,Java,Regex,String,这是我的正则表达式,因为我已经将它输入到我的java文件中 String myRegex = "(?<=[^a-zA-Z0-9])(target)(?=[^a-zA-Z0-9])"; 如果我有一个字符串,如下所示: .目标它起作用了 但是,如果我有一个字符串,它只说target,那么它不起作用。如何修改正则表达式,以便在字符串的开头或结尾没有任何内容时仍然匹配 编辑示例 _目标-应该成功 目标-应该成功 目标-应该成功 目前,这些示例在当前正则表达式中失败。如果我正确理解了您的问题,您可

这是我的正则表达式,因为我已经将它输入到我的java文件中

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]|$)";