java正则表达式中“或”表示

有字符串如下
<p fund="000001">
<text stock="000002" fund="000003" />
</p>
需要用正则表达式将000001 000002 000003解析出来,写了如下正则语句
<.[^<>]*?\\sfund=['\"]?(.*?)['\"]?(\\s.*?)?>
但是想同时将 fund 和 stock 匹配处出来。试了 将正则表达式中 fund替换成 fund|stock 却不行。该怎么办?

也就是用正则来匹配 fund="数字" stock="数字" 这些内容,并且捕捉其中的数字的意思,对吧

var reg=/\s+?(?:fund|stock)=\"(\d+)\"/gi;

这是亲测结果:

可以在这里在线测试:

在线正则表达式测试

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-03
(fund|stock)=\"\d+?\"
第2个回答  2019-04-03

fund|stock 要用括号括起来作为一个整体,写成:

String pattern = "<.[^<>]*?\\s(fund|stock)=['\"]?(.*?)['\"]?(\\s.*?)?>";

不括起来的话

<.[^<>]*?\\sfund|stock=['\"]?(.*?)['\"]?(\\s.*?)?>

等价于

<.[^<>]*?\\sfund

或者 

stock=['\"]?(.*?)['\"]?(\\s.*?)?>

匹配到的结果就是

    <p fund

    <text stock="000002" fund

显然不是你想要的

第3个回答  2019-04-03
配音 吴桂苓