为了账号安全,请及时绑定邮箱和手机立即绑定

特殊字符串的正则表达式设计

特殊字符串的正则表达式设计

慕娘9325324 2022-10-12 10:17:06
无法为以单引号或双引号开头?和结尾的字符串实现正则表达式。;例如:?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贡献1828条经验 获得超4个赞

你可以使用这个正则表达式:

(["']?)\?.*;\1

对于 Java 使用:

final String pattern = "(['\"]?)\\?.*;\\1";

正则表达式演示

  • (["']?)匹配一个可选 '的或"并在组 #1 中捕获

  • \1是与组 #1 中相同值的反向引用


查看完整回答
反对 回复 2022-10-12
?
守着星空守着你

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;

请参阅Java 演示正则表达式演示。正则图:


//img1.sycdn.imooc.com//634623c900012c2406680142.jpg

备注

  • while (matcher.find())- 遍历字符串中的所有潜在匹配

  • matcher.group()- 访问匹配值。

正则表达式

  • (['"]?)- 捕获组 1:要么'"

  • \?- 一个?字符

  • .*?- 任何 0+ 字符,尽可能少(模式用 编译Pattern.DOTALL,因此它也将匹配换行符)

  • ;- 一个分号

  • \1- 与第 1 组中捕获的值相同。


查看完整回答
反对 回复 2022-10-12
?
慕容森

TA贡献1853条经验 获得超18个赞

您的描述声明“以 ? 开头并以 ; 结尾”,但您的示例字符串不以分号结尾 - 它以双引号结尾。

如果要允许字符串以单引号或双引号开头或结尾,则匹配应为: ^['"]?\?[^;]+;\['"]?$


查看完整回答
反对 回复 2022-10-12
  • 3 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信