当前位置:  开发笔记 > 编程语言 > 正文

如何检查给定的正则表达式是否有效?

如何解决《如何检查给定的正则表达式是否有效?》经验,为你挑选了2个好方法。

我有一个小程序,允许用户输入一些正则表达式.之后我想检查这个输入是否是有效的正则表达式.

我想知道Java中是否有内置方法,但是找不到这样的喷气机.

你能给我一些建议吗?



1> laz..:

这是一个例子.

import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class RegexTester {
    public static void main(String[] arguments) {
        String userInputPattern = arguments[0];
        try {
            Pattern.compile(userInputPattern);
        } catch (PatternSyntaxException exception) {
            System.err.println(exception.getDescription());
            System.exit(1);
        }
        System.out.println("Syntax is ok.");
    }
}

java RegexTester "(capture"然后输出"Unclosed group",例如.



2> polygenelubr..:

你可以只Pattern.compile使用正则表达式字符串并查看它throws PatternSyntaxException.

    String regex = "***";
    PatternSyntaxException exc = null;
    try {
        Pattern.compile(regex);
    } catch (PatternSyntaxException e) {
        exc = e;
    }
    if (exc != null) {
        exc.printStackTrace();
    } else {
        System.out.println("Regex ok!");
    }

这个特别产生以下输出:

java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
***
^

关于lookbehinds

这是旧可靠的regular-expressions.info的引用:

关于Lookbehind的重要说明

Java通过允许有限重复更进一步.您仍然无法使用星号或加号,但您可以使用问号和带有指定max参数的花括号.Java认识到有限重复可以被重写为具有不同但固定长度的字符串的交替.

我认为这个短语包含一个拼写错误,应该说"不同但有限长度".在任何情况下,Java似乎都允许在后视中交替使用不同的长度.

    System.out.println(
        java.util.Arrays.toString(
            "abracadabra".split("(?<=a|ab)")
        )
    ); // prints "[a, b, ra, ca, da, b, ra]"

还有一个错误,你可以实际拥有一个无限长度的后视并让它工作,但我不会依赖这样的行为.

    System.out.println(
        "1234".replaceAll(".(?<=(^.*))", "$1!")
    ); // prints "1!12!123!1234!"


不,那不是拼写错误.他说*每个*(理论)替代方案都有固定长度.如果它们没有固定,你将无法确定哪一个最长.
推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有