我正在使用正则表达式来匹配HTML字符串中的短语。例如,我想查找“人工智能”的每个实例,并返回紧接其前面的<span>
标记。
我遇到的麻烦是我的正则表达式只返回一个大的匹配。
以下是我一直在使用的在线正则表达式构建器的链接:https://regex101.com/r/rK9yO9/1
我希望返回以下两场比赛:
<span m='3'>
<span m='13'>
示例字符串:
<p><span m='2'>of</span> <span m='3'>artificial</span>
<span m='4'>intelligence.</span><span m='4'>So</span>
<span m='5'>that</span> <span m='6'>seems</span>
<span m='9'>good.</span> <span m='10'>The</span>
<span m='11'>impact</span> <span m='12'>of</span>
<span m='13'>artificial</span> <span m='14'>intelligence,</span>
<span m='15'>on</span> </p>
N.b文本中没有换行符,为了便于阅读,我添加了这些换行符。
我到目前为止的正则表达式是:
(<span.*>)artificial.?<\/span>.?<span.*>intelligence.?<\/span>
返回以下匹配项:
<span m='2'>of</span> <span m='3'>artificial</span>
<span m='4'>intelligence.</span><span m='4'>So</span>
<span m='5'>that</span> <span m='6'>seems</span>
<span m='9'>good.</span> <span m='10'>The</span>
<span m='11'>impact</span> <span m='12'>of</span>
<span m='13'>artificial</span> <span m='14'>intelligence,</span>
答案 0 :(得分:2)
你正在使用贪婪的正则表达式。要在第一次出现时停止匹配吗?
(<span.*?>)artificial.?<\/span>.?<span.*?>intelligence.?<\/span>
将匹配
'<span m='2'>of</span> <span m='3'>artificial</span> <span m='4'>intelligence.</span>'
您可以轻松获得匹配的第一组
答案 1 :(得分:1)