我试图用自定义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
”
我的方法错了吗?
答案 0 :(得分:0)
您可以使用此方法验证网址
android.util.Patterns.WEB_URL.matcher(url).matches();
答案 1 :(得分:0)
首先,与Web服务的开发人员交谈,或阅读其文档,并了解ParamVldtnRgExp
的规范。由于它适用于PCRE(PHP)正则表达式测试程序并且不能与Java一起使用,可能表达式采用PCRE格式,但最好与发布此数据的人员确认。
然后,有三个主要选项:
查找与PCRE兼容的PCRE
想出一种将PCRE表达式转换为有效的Java表达式的方法
说服Web服务的开发人员提供其他一些正则表达式模式格式,无论是Java还是可以找到合适库的格式