首页 > 解决方案 > 这种情况下的正则表达式是什么?

问题描述

我有一个正则表达式挑战(我需要你的帮助)

我正在尝试创建一个正则表达式,仅当字符串开头和“bbb”单词之间不存在“aaa”时才找到“bbb”

所以我建立了以下表达式:^(?!.*(aaa)).*?(bbb)

它有效,但我注意到当“aaa”位于“bbb”之后时找不到“bbb”......即使“aaa”位于“bbb”和结尾之间,我也需要表达式来找到“bbb”字符串

所以:

必须在以下位置找到“bbb”:

"ddd bbb eee"
"bbb fff aaa"

不得在以下位置找到“bbb” :

"aaa bbb eee ddd" 
"aaa ccc bbb"

Ps:查看此链接(选择 Java)http://www.regexplanet.com/cookbook/ahJzfnJlZ2V4cGxhbmV0LWhyZHNyEwsSBlJlY2lwZRiAgIDii-WPCgw/index.html来测试正则表达式。我为我的案例简化了测试字符串,但你知道,在现实生活中,这些字符串将是实际的各种句子。

谢谢

编辑:

啊,伙计!我总是在我的正则表达式问题中忘记一些东西!大声笑

我忘了提到“bbb”需要用另一个词替换(replaceAll)(即:“zzz”)。所以表达式的结果需要是修改后的字符串而不是布尔值。

所以我们应该有这些结果:

"ddd bbb eee" => "ddd zzz eee"
"bbb fff aaa" => "zzz fff aaa"
"bbb ggg bbb" => "zzz ggg zzz"
"aaa bbb eee ddd" => "aaa bbb eee ddd"
"aaa ccc bbb" => "aaa ccc bbb"
"fff aaa eee bbb jjj bbb" => "fff aaa eee bbb jjj bbb"

抱歉,我无法通过手机更新测试链接。

标签: javaregex

解决方案


几乎是对的!!

只是一个小修正:String pattern = "^(?!.*(aaa).*?(bbb))";

public static void main(String[] args)
    {
        String[] lines =  {"ddd bbb eee",
                           "bbb fff aaa",
                           "aaa bbb eee ddd",
                           "aaa ccc bbb"};

        String pattern = "^(?!.*(aaa).*?(bbb))";

        Pattern p = Pattern.compile(pattern);


        for (String line: lines)
        {
            Matcher matcher = p.matcher(line);
            System.out.println(matcher.find());
        }
    }

开/关:

True
True
False
False

希望这有效..


推荐阅读