下午遇到一个问题,业务场景大致上是,保险公司收银台返回的接口是一个HTML文本流,不是支付url字符串,需要获取html文本流里JS里的支付url.Jsoup操作不了里面的script,于是想到了正则表达式。
找了正则表达式的书,研究了一下午写了出来凑合用了。
html文本截取部分大致如下,有中文、数字、符号、特殊字符,并且文本流里还有换行
window.location.href = 'https://mapi.alipay.com/gateway.do
?body=2&subject=安享一生尊享版&sign_type=MD5¬ify_url=
https://axwxtest.95303.com/axPay/pay/apay/asyncNotify&
out_trade_no=AT20191101170558249891&return_url=https://
axwxtest.95303.com/axPay/pay/apay/syncNotify&sign=d7b3
a68f9b8639bea148809c21f98fbc&app_pay=Y&_input_charset=
utf-8&it_b_pay=404m&total_fee=0.01&service=alipay.wap.create
.direct.pay.by.user&seller_id=2088221369936773&partner=20882213
69936773&payment_type=1';\n"
正则表达式
(?m)http[\w\u4e00-\u9fa5\.\/?_\-=&:]+
代码demo如下
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @ClassName: RegTest
* @Description: RegTest
* @Author: pangning@58.com
* @Date: 2019/11/7 15:56
* @Version: 1.0
**/
public class RegTest {
// 支付链接正则匹配
private static final String regex = "(?m)http[\\w\\u4e00-\\u9fa5\\.\\/?_\\-=&:]+";
// 创建 Pattern 对象
private static final Pattern r = Pattern.compile(regex);
public static void main(String[] args) {
String htmlStream = "window.location.href = 'https://mapi.alipay.com/gateway.do?body=2&subject=安享一生尊享版&sign_type=MD5¬ify_url=https://axwxtest.95303.com/axPay/pay/apay/asyncNotify&out_trade_no=AT20191101170558249891&return_url=https://axwxtest.95303.com/axPay/pay/apay/syncNotify&sign=d7b3a68f9b8639bea148809c21f98fbc&app_pay=Y&_input_charset=utf-8&it_b_pay=404m&total_fee=0.01&service=alipay.wap.create.direct.pay.by.user&seller_id=2088221369936773&partner=2088221369936773&payment_type=1';\n" +
"\t\t\t}";
// 现在创建 matcher 对象
Matcher m = r.matcher(htmlStream);
if (m.find( )) {
System.out.println("match value: " + m.group() );
} else {
System.out.println("not found");
}
}
}
总结一下:
[\b] 回退(并删除)一个字符Backspace键
\f 换页符
\n 换行符
\r 回车符
\t Tab键
\v 垂直制表符
\d [0-9]
\D [^0-9]
\w [a-zA-Z0-9_]
\W [^a-zA-Z0-9_]
\s [\f\n\r\t\v]
\S [^\f\n\r\t\v]
ASICII码也支持
\u4e00-\u9fa5 中文汉字
边界
\b the cat is... \bcat\b
^头 尾$
(?m) 分行匹配
本文介绍如何使用正则表达式从HTML文本流中提取支付URL,解决保险公司收银台接口返回的HTML文本流中JS里的支付URL提取问题。
5万+

被折叠的 条评论
为什么被折叠?



