java - Java/Regex:否定重复两次的相同字符:
问题描述
如果我有以下字符串:
--l=Richmond-Hill, NYC --m=5-day --d=hourly
我想匹配组:
--l=Richmond-Hill, NYC
--m=5-day
--d=hourly
我想出了以下正则表达式:
(^--[a-zA-Z]=[^-]*)
当等号后的值没有破折号时,此方法有效。基本上,我如何否定双破折号?
解决方案
我的猜测是,也许您希望设计一些类似于:
--[a-zA-Z]=.*?(?=--|$)
演示
测试
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class re{
public static void main(String[] args){
final String regex = "--[a-zA-Z]=.*?(?=--|$)";
final String string = "--l=Richmond-Hill, NYC --m=5-day --d=hourly\n"
+ "--l=Richmond-Hill, NYC\n"
+ "--m=5-day\n"
+ "--d=hourly";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
输出
Full match: --l=Richmond-Hill, NYC
Full match: --m=5-day
Full match: --d=hourly
Full match: --l=Richmond-Hill, NYC
Full match: --m=5-day
Full match: --d=hourly
如果您想探索/简化/修改表达式,它已在 regex101.com的右上角面板中进行了说明。如果您愿意,您还可以在此链接中观看它如何与一些示例输入匹配。
正则表达式电路
jex.im可视化正则表达式:
推荐阅读
- python-3.x - 如何在 requests.get() 中添加标签和字符串以使用 python beautifulsoup 抓取数据
- php - 带有动态网址的 Wordpress 按钮
- c# - 身份在 MVC 中不是持久的
- javascript - Can't v-bind:data on Object Tag Element inside template
- android - 如何检测用户是否使用 Android 蓝牙设置与 BLE 设备配对?
- ios - xcode 构建遗留项目,出现错误“您不允许为团队创建分发配置文件”
- r - data.table 条件行计数与 R 中的其他非条件聚合集成
- reactjs - 如何在 React Native 中创建一个可滚动的框?
- html - 当我添加一些交叉淡入淡出的图像时,Flexbox 不会保持正确的高度
- excel - 将变量作为参数从 excel VBA 传递