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

Java 特殊字符串的正则表达式设计,java,regex,Java,Regex,无法为以开头的行中的字符串实现正则表达式?以,; 加上单引号或双引号 例如: ?abcdef; '?abcdef;' "?abcdef;" 我试了很多,像这样^\?[^;]+\\;$但它没有起作用 测试代码段: import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexTest { public static void main(final String[] args) {

无法为以开头的行中的字符串实现正则表达式?以,; 加上单引号或双引号

例如:

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

您可以使用此正则表达式:

(["']?)\?.*;\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;
请参阅和。正则图:

注:

while matcher.find-遍历字符串中所有可能的匹配项 matcher.group-访问匹配值。 正则表达式

[']? - 捕获组1:或 \? - A.烧焦 .*? - 任何0+个字符,使用pattern.DOTALL编译的模式尽可能少,因此它也将跨换行符匹配 ; - 分号 \1-与组1中捕获的值相同。
可能是^[']?\?*\1美元行吗?看见Java:s.matches['\]?\\?*\\1.请在问题中添加一个代码段,说明如何测试正则表达式。添加的代码段@wiktory您似乎需要部分匹配,因此将其与.find一起使用,而matcher.find{System.out.printlnmatches=+matcher.group;},正则表达式应为String patternString=['\]?\\?*\\1.看,你希望得到什么?如果字符串有换行符,请使用?s['\]?\\?*\\1正则表达式,但不清楚您称之为“不工作”以及如何使其为您工作。您需要调用matcher.find这非常有用+1@Girish Prints truematches=有点让人困惑