我有这个正则表达式:
String patt = "(\\w+?)(:|<|>)(\\w+?),";
Pattern pattern = Pattern.compile(patt);
Matcher matcher = pattern.matcher(search + ",");
我能够匹配像
这样的字符串search = "firstName:Giorgio"
但是我无法匹配字符串
search = "email:giorgio.rossi@libero.it"
或
search = "dataregistrazione:27/10/2016"
如何修改正则表达式以匹配这些字符串?
答案 0 :(得分:0)
您可以使用
String pat = "(\\w+)[:<>]([^,]+)"; // Add a , at the end if it is necessary
请参阅regex demo
<强>详情:
(\w+)
- 第1组捕获1个或多个字词[:<>]
- 字符类中的一个字符:
,<
或>
([^,]+)
- 第2组捕获除,
以外的1个或多个字符(在演示中,我添加\n
作为演示输入文本包含换行符。)答案 1 :(得分:0)
你可以使用这样的正则表达式:
public static void main(String[] args) {
String[] arr = new String[]{"firstName:Giorgio", "email:giorgio.rossi@libero.it", "dataregistrazione:27/10/2016"};
String pattern = "(\\w+[:|<|>]\\w+)|(\\w+:\\w+\\.\\w+@\\w+\\.\\w+)|(\\w+:\\d{1,2}/\\d{1,2}/\\d{4})";
for(String str : arr){
if(str.matches(pattern))
System.out.println(str);
}
}
输出是:
firstName:Giorgio
email:giorgio.rossi@libero.it
dataregistrazione:27/10/2016
但你必须记住,这个正则表达式只适用于你的数据格式。
要构成通用正则表达式,你应该使用RFC文档和文章(即here)电子邮件格式
另外this问题也很有用。
希望它有所帮助。
答案 2 :(得分:0)
角色类\w
匹配[A-Za-z0-9_]
。所以请将正则表达式更改为(\\w+?)(:|<|>)(.*),
以匹配:
到,
中的任何字符。
或者提及您可以预期的所有字符,例如(\\w+?)(:|<|>)[@.\\w\\/]*,
。