无法为以单引号或双引号开头?和结尾的字符串实现正则表达式。;例如:?abcdef;'?abcdef;'"?abcdef;" 我尝试了很多,像这样"^\\?([^;]+)\\;$",但没有奏效。测试代码片段:import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexTest { public static void main(final String[] args) { final String text = "This is param-start ?abcdef; param-end"; final String patternString = "(['\"]?)\\?.*;\\1"; final Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE); final Matcher matcher = pattern.matcher(text); System.out.println("lookingAt = " + matcher.lookingAt()); System.out.println("matches = " + matcher.matches()); }}
3 回答
守着星空守着你
TA贡献1799条经验 获得超8个赞
您可以使用
final String text = "This is param-start ?abcdef; param-end";
final String patternString = "(['\"]?)\\?.*?;\\1";
final Pattern pattern = Pattern.compile(patternString, Pattern.DOTALL);
final Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("Match found: " + matcher.group());
}
// => Match found: = ?abcdef;
备注:
while (matcher.find())
- 遍历字符串中的所有潜在匹配matcher.group()
- 访问匹配值。
正则表达式
(['"]?)
- 捕获组 1:要么'
或"
\?
- 一个?
字符.*?
- 任何 0+ 字符,尽可能少(模式用 编译Pattern.DOTALL
,因此它也将匹配换行符);
- 一个分号\1
- 与第 1 组中捕获的值相同。
慕容森
TA贡献1853条经验 获得超18个赞
您的描述声明“以 ? 开头并以 ; 结尾”,但您的示例字符串不以分号结尾 - 它以双引号结尾。
如果要允许字符串以单引号或双引号开头或结尾,则匹配应为: ^['"]?\?[^;]+;\['"]?$
添加回答
举报
0/150
提交
取消