在给定的字符串中,开发一个模式以匹配字母“b”的任何出现,其中它不应该跟在字母“a”之后

时间:2018-01-05 13:35:38

标签: regex regex-negation regex-group

在给定的字符串中,开发一个模式以匹配字母“b”的任何出现,其中它不应该跟在字母“a”之后。

例如:

abc或ab 不匹配 b ba,bb,cba 应匹配。

我尝试了以下正则表达式:

**/(?!.*ab)(?=.*b)^(\w+)$/**

foll输入工作正常:

abba 
dbcd 
bacdba 
bacd 
adfjldb 
dkfjb
abdfdsba

但是好像我把输入放在一行中,如:

ab ba abdkfjdk bacdk dkekfba

它与单词不匹配。

2 个答案:

答案 0 :(得分:0)

如果您想匹配任何不在“a”之后的字母“b”的出现。即,“b”不应该在“a”之后,但“a”可以在“b 之后,你可以使用这个使用negative lookbehind的正则表达式:

(?<!a)b

<强>解释

  • 负面的后视(?<!
  • 其中断言背后的内容不是a
  • 关闭否定后视)
  • 匹配b

答案 1 :(得分:0)

您的问题描述与您的样品不符。你说问题是:

  

在给定的字符串中,开发一个匹配任何匹配项的模式   字母“b”,其中“b”不是字母“a”。

那只是

Set<String> set = 
        prop.entrySet().stream()
            .map(e -> (String)e.getValue())
            .flatMap(Pattern.compile(pattern)::splitAsStream)
            .collect(Collectors.toSet());

string interpolator,所需的匹配为绿色。

然而,您的样本意味着另一个问题。他们暗示正确的问题描述必须是:

  

在给定字符串中,开发一个模式以匹配包含的任何单词   字母“b”,除非“b”跟在字母“a”之后。

这将是

 [^a](b)

See here,所需的匹配为绿色。