java - 这种情况下的正则表达式是什么?
问题描述
我有一个正则表达式挑战(我需要你的帮助)
我正在尝试创建一个正则表达式,仅当字符串开头和“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"
抱歉,我无法通过手机更新测试链接。
解决方案
几乎是对的!!
只是一个小修正: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
希望这有效..
推荐阅读
- javascript - 循环中的 AWS S3 CreateReadStream 仅读取和写入 1 个文件
- javascript - 使用 ref 专注于 Input 元素不起作用
- powershell - Get-WmiObject -Filter 的区分大小写用法
- java - 可以访问来自 java 运行时的本机 void,就像那样?
- javascript - 按属性值计算数组中的对象并在 HTML 中显示结果
- python - 带有键/值类型对的类型提示字典
- javascript - Vue:滚动监听器问题
- reactjs - 在 react-navigation 5 中将函数作为参数传递
- python - Extract a list from a multidimensional list
- scala - 在 Spring-Data-CosmosDB 中使用 requestContinuation 进行分页