使用自定义正则表达式验证字符串

时间:2017-12-28 15:57:13

标签: android regex

我试图用自定义Regex表达式验证一些字符串。我有以下方法:

    public static boolean validateWithCustomRegex(String pattern,String toValidate){
    boolean result = false;

    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(toValidate);
    if (m.find())
        result=true;

    return result;
}

修改 我在一个json数组中得到我的正则表达式,其中有来自API的对象

{

"ParamCd":"testeUrl",
"ParamVldtnRgExp":"@\\b((ftp|https?):\/\/[-\\w]+(\\.\\w[-\\w]*)+|(?:[a-z0-9](?:[-a-z0-9]*[a-z0-9])?\\.)+(?: com\\b|edu\\b|biz\\b|gov\\b|in(?:t|fo)\\b|mil\\b|net\\b|org\\b|[a-z][a-z]\\b))(\\:\\d+)?(\/[^.!,?;\"'<>()\\[\\]{}\\s\\x7F-\\xFF]*(?:[.!,?]+[^.!,?;\"'<>()\\[\\]{}\\s\\x7F-\\xFF]+)*)?@iS",
"ParamWbCntrlCd":"TEXTBOX",
"ParamOrdr":1053,
"UsrCnfgrblPrmtrsRspnItms":[
    {
        "LangCd":"pt-PT",
        "LablTxt":"xxxxxx",
        "HlprTxt":"xxxxxxxxxxxx",
        "ErrTxt":"xxxxxxxxxxxxxxxxxx"
    },
    {
        "LangCd":"en-UK",
        "LablTxt":"xxxxxx",
        "HlprTxt":"xxxxxxxxxxxx",
        "ErrTxt":"xxxxxxxxxxxxxxxxxx"
    }
]

}

我的模式是:

@\b((ftp|https?)://[-\w]+(\.\w[-\w]*)+|(?:[a-z0-9](?:[-a-z0-9]*[a-z0-9])?\.)+(?: com\b|edu\b|biz\b|gov\b|in(?:t|fo)\b|mil\b|net\b|org\b|[a-z][a-z]\b))(\:\d+)?(/[^.!,?;"'<>()\[\]{}\s\x7F-\xFF]*(?:[.!,?]+[^.!,?;"'<>()\[\]{}\s\x7F-\xFF]+)*)?@iS

和我的“toValidate”字符串是:http://s.com

在这个网站上,正则表达式验证我的字符串 https://regex101.com/r/kD4nNJ/1 但在Android上我总是得到“false

我的方法错了吗?

2 个答案:

答案 0 :(得分:0)

您可以使用此方法验证网址

android.util.Patterns.WEB_URL.matcher(url).matches();

答案 1 :(得分:0)

首先,与Web服务的开发人员交谈,或阅读其文档,并了解ParamVldtnRgExp的规范。由于它适用于PCRE(PHP)正则表达式测试程序并且不能与Java一起使用,可能表达式采用PCRE格式,但最好与发布此数据的人员确认。

然后,有三个主要选项:

  1. 查找与PCRE兼容的PCRE

  2. 的正则表达式库
  3. 想出一种将PCRE表达式转换为有效的Java表达式的方法

  4. 说服Web服务的开发人员提供其他一些正则表达式模式格式,无论是Java还是可以找到合适库的格式