在WebViewClient中使用Java模式正则表达式从解码的mailto中提取信息
我使用android API 19在webview中嵌入网站,在这里我遇到了这样一个问题,当用户单击链接mailto时。我想提取信息,并启动发送意图的操作在WebViewClient中使用Java模式正则表达式从解码的mailto中提取信息,java,android,regex,android-webview,webviewclient,Java,Android,Regex,Android Webview,Webviewclient,我使用android API 19在webview中嵌入网站,在这里我遇到了这样一个问题,当用户单击链接mailto时。我想提取信息,并启动发送意图的操作 String firstUrl = "mailto:abc@test.com.kh"; String secondUrl = "mailto:abc@test.com.kh?subject=Request%20to%20create%20a%20new%20listing&body=To%20create%20or%20update%
String firstUrl = "mailto:abc@test.com.kh";
String secondUrl = "mailto:abc@test.com.kh?subject=Request%20to%20create%20a%20new%20listing&body=To%20create%20or%20update%20your%20listing%20on%20cambodiastaging.yoolk.com";
所以我想匹配并得到这样的数据
email #=> abc@test.com.kh
subject #=> Request%20to%20create%20a%20new%20listing
body #=> To%20create%20or%20update%20your%20listing%20on%20cambodiastaging.yoolk.com
以下是我的尝试
"^mailto:(^?)\\?{0,1}" #=> group1=abc@test.com.kh for both url
我要寻找的最佳答案是匹配的正则表达式模式:
- “邮寄:abc@test.com.kh2"
- “邮寄:abc@test.com.kh?主题=请求%20到%20创建%20a%20新建%20列表和正文=到%20创建%20或%20更新%20您的%20列表%20在%20cambodiastaging.yoolk.com上”
- “mailto:mailto:abc@test.com.kh?主体=主体&主体=主体”
- “mailto:mailto:abc@test.com.kh正文=正文和主题=主题和抄送=abc@me.com&密件抄送=aaa@me.com"
secondUrl
总是采用相同的格式(mailto、subject、body),则可以使用String.split()
三次
?
拆分第二个URL
,并获取第一个元素。它将是电子邮件ID和再次拆分。现在,第[0]个元素是subject,另一个元素是body
String mailId=secondUrl.split(“\\?”)[0];
字符串subject=secondUrl.split(\\?)[1]。split(&)[0];
字符串正文=secondUrl.split(\\?”[1]。split(&“)[1]代码>
这不是最好的答案,但我得到了这个工作,现在为我的url模式上面
String mailToRegexp = "^mailto:([^?]+)\\?{0,1}(?:subject=(.+)&body=(.+)){0,1}";
Pattern mailToPattern = Pattern.compile(mailToRegexp);
Matcher mailToMatcher = mailToPattern.matcher(url);
if (mailToMatcher.find()) {
String email = mailToMatcher.group(1);
String subject = mailToMatcher.group(2);
String body = mailToMatcher.group(3);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {email});
if (subject != null) {
intent.putExtra(Intent.EXTRA_SUBJECT, URLDecoder.decode(subject));
}
if (body != null) {
intent.putExtra(Intent.EXTRA_TEXT, URLDecoder.decode(body));
}
startActivity(Intent.createChooser(intent, "Email To:"));
}
如果模式url更改“subject”和“body”的顺序或添加类似“cc”的内容,则此正则表达式将中断。是的,但这不是我想要的最佳答案。我希望它是灵活的,因为mailto链接彼此不同。就像“主体”和“身体”的顺序一样。