正则表达式不应包含整个单词和点

时间:2018-09-27 18:56:37

标签: java regex

我需要编写不包含单词[apple]的正则表达式 并且也不应包含点[。]

有些苹果-假

其他一些字符串-true

其他一些字符串。 -错误

我在考虑^((?!apple).)*$,它排除了整个单词

2 个答案:

答案 0 :(得分:0)

您需要包含点作为要排除的字符。由于.是正则表达式中的控制字符,因此必须对其进行转义:

^((?!apple|\.).)*$

在这种情况下,只要没有匹配“ apple”或“。”的模式,我们就告诉它匹配任何字符的0个或多个。字符串中的任何位置。

此表达式可以按如下方式进行解构:

^     = Start of string
(     = Start of capture group
(     = Start of capture group
?!    = Negative Look ahead
apple = First thing to look for
|     = Logical Or
\.    = Match a literal . character
)     = End of capture group
.     = Match any character
)     = End of capture group
*     = Match zero or more
$     = End of String

答案 1 :(得分:0)

使用

s.matches("(?s)(?!.*apple)[^.]*")

请参见regex demo(该模式针对单个多行字符串进行了调整,请在演示中不要使用该模式)。

正则表达式为(?s)^(?!.*apple)[^.]*$,表示:

  • (?s)-一个Pattern.DOTALL修饰符,使.匹配包含换行符的任何字符
  • ^-字符串的开头(在.matches()中隐含)
  • (?!.*apple)-当前行右边(在字符串开头)的否定超前查询,它会尽可能地匹配所有字符,后跟apple子字符串(如果模式未找到,没有匹配项)
  • [^.]*-除点以外的0多个字符
  • $-字符串结尾(在.matches()中隐含)