java - 我正在尝试质疑正则表达式匹配
问题描述
'[loc]' 必须包含在开头,后面的任何字符都没有关系。如何用正则表达式表达它?前任)
>>> [loc]korea
true
>>> [loc]
false // (One or more strings must follow [loc])
>>> [lll]seoul
false
>>> busan
false
我用过Java,我真的想不出来。求兄弟们帮忙
String pattern = "\\[(loc)\\]";
String val = "[loc]seoul";
String val2 = "[loc]";
String val3 = "seoul";
boolean regex = Pattern.matches(pattern, val);
System.out.println(regex);
boolean regex2 = Pattern.matches(pattern, val2);
System.out.println(regex2);
boolean regex3 = Pattern.matches(pattern, val3);
System.out.println(regex3);
解决方案
我知道您有一些字符串,一个关键字,它必须出现在字符串的开头。在这种情况下,您需要Pattern.quote
转义任何需要转义的特殊字符并使用.+
模式来匹配一个或多个 chars。(如果您的第一个问题句是正确的并且您不关心后面的内容,您也可以考虑.*
匹配任何零个或多个字符的模式。)要匹配默认情况下不匹配的[loc]
换行符,您需要传递选项,或在你的模式前加上inline 修饰符。.
Pattern.DOTALL
(?s)
解决方案看起来像
List<String> vals = Arrays.asList(
"[loc]seoul", "[loc]", "seoul"
);
String keyword = "[loc]";
String pattern = Pattern.quote(keyword) + ".+";
Pattern p = Pattern.compile(pattern, Pattern.DOTALL);
for (String val : vals) {
System.out.println(val + ": \"" + p.matcher(val).matches() + "\"");
}
请参阅Java 演示。输出:
[loc]seoul: "true"
[loc]: "false"
seoul: "false"
推荐阅读
- java - 在另一台计算机上执行 Runnable jar 时,JavaMail MimeMessage 不会发送
- php - PhpSpreadsheet 保存并保持样式
- sql - 使用 join 语句连接子查询
- react-admin - react-admin selectArrayInput 没有选择
- android - 如何更改 SeekBar 中每个刻度标记的颜色
- javascript - 为什么我不能添加到数字对象属性?
- javascript - 在 chrome 浏览器中调试时无法访问顶级模块变量
- r - 在R闪亮中将列类型从因子更改为整数
- javascript - 正则表达式匹配在搜索中省略第一个字符
- javascript - 如何使用 d3 绘制连续线而无需单击并拖动鼠标,而只需使用 mouseover 事件?