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

无法为以单引号或双引号开头?和结尾的字符串实现正则表达式。;


例如:


?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());

    }

}


慕娘9325324
浏览 109回答 3
3回答

明月笑刀无情

你可以使用这个正则表达式:(["']?)\?.*;\1对于 Java 使用:final String pattern = "(['\"]?)\\?.*;\\1";正则表达式演示(["']?)匹配一个可选 '的或"并在组 #1 中捕获\1是与组 #1 中相同值的反向引用

守着星空守着你

您可以使用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 演示和正则表达式演示。正则图:备注:while (matcher.find())- 遍历字符串中的所有潜在匹配matcher.group()- 访问匹配值。正则表达式(['"]?)- 捕获组 1:要么'或"\?- 一个?字符.*?- 任何 0+ 字符,尽可能少(模式用 编译Pattern.DOTALL,因此它也将匹配换行符);- 一个分号\1- 与第 1 组中捕获的值相同。

慕容森

您的描述声明“以 ? 开头并以 ; 结尾”,但您的示例字符串不以分号结尾 - 它以双引号结尾。如果要允许字符串以单引号或双引号开头或结尾,则匹配应为: ^['"]?\?[^;]+;\['"]?$
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java