这是我的正则表达式,因为我已将其输入到我的java文件中。
String myRegex = "(?<=[^a-zA-Z0-9])(target)(?=[^a-zA-Z0-9])";
如果我有一个字符串如下:
.target.
- 它有效。
但是,如果我有一个JUST说target
的字符串,它就不起作用。如何修改正则表达式,以便如果字符串的开头或结尾没有任何内容,它仍然匹配?
编辑 - 示例。
_target
- 应该成功!
target_
- 应该成功!
target
- 应该成功!
目前这些示例因当前的正则表达式而失败。
答案 0 :(得分:2)
问题是,这里有两个负面因素。我的外表可能是负面的,我的角色类可能是负面的。目前,我的外表是积极的,我的角色类是负面的。所以它说:&#34;向后看,确保找到不属于这些类的东西&#34;。所以当你在那里什么都没有时,它就找不到它而且会失败。解决方案是让我看起来是消极的,并使角色类积极。所以现在它说&#34;看看后面,确定有ISN&#39; T这些角色中的任何一个&#34;。因此,如果它是空的,它就会因为满足条件而失败。
这是最终的正则表达式:
String myRegex = "(?<![a-zA-Z0-9])target(?![a-zA-Z0-9])";
答案 1 :(得分:2)
添加&#34;开始输入&#34;在你的背后,添加&#34;输入结束&#34;使用正则表达式交替(即|
,这是一个逻辑&#34;或&#34;):
String myRegex = "(?<=^|[^a-zA-Z0-9])target(?=[^a-zA-Z0-9]|$)";
你的正则表达式的问题在于你在后面的需要那里有一个不是字母/数字的前面的字符。
这些环顾四周也匹配输入的开始/结束。
请参阅live demo。
答案 2 :(得分:0)
如果我正确理解您的问题,您可以使用?
来表示应该有0或1个非字母或数字字符,而不是使用前瞻和后视之后&#34;目标&#34;。
([^a-zA-Z0-9])?(target)([^a-zA-Z0-9])?
答案 3 :(得分:0)
您应该能够使用* 0或更多量词来匹配目标,以匹配任何出现0个或更多个字符的目标。所以:
[_]*(target)[_]*
应匹配:
_target
target
target_
_target_
将要在字词之前或之后匹配的任何元素添加到括号中。匹配.target.
的示例:
[\._]*(target)[\._]*
这将匹配目标子字符串,无论字符串的哪个部分。如果您只想在字符串开头处为匹配项生成规则,请将^
锚点添加到其中,如:
^[\._]*(target)[\._]*
并且只有在他们开始字符串时才会匹配上面提到的那些。