如何使正则表达式在第一场比赛中停止?

时间:2019-02-22 14:16:01

标签: c# regex

字符串

<img alt=":)" class="smilies" id="smilie_207" src="https://example.com/smile.gif" title="Smile"/><img alt=":)" class="smilies" id="smilie_207" src="https://example.com/smile.gif" title="Smile"/><img alt=":)" class="smilies" id="smilie_207" src="https://example.com/smile.gif" title="Smile"/>

包含多个或一个的字符串中

<img alt=":)" class="smilies" id="smilie_207" src="https://example.com/smile.gif" title="Smile"/>

我尝试使用

<img alt=":.*"\s?/>

但它需要字符串中的所有/>字符

我只想从<img到第一个字符/>的字符串

<img alt=":)" class="smilies" id="smilie_207" src="https://example.com/smile.gif" title="Smile"/>

2 个答案:

答案 0 :(得分:0)

我不是regex的专家,但这将其分为每个img标签。我想这就是你要的?然后,您可以遍历比赛。如果您想使用内部结构(不包括标签的打开和关闭部分),也可以将它们包装在自己的组中。

<img\s(.*?(?=\s?/>))/>

这导致以下匹配:

1: <img alt=":)" class="smilies" id="smilie_207" src="https://example.com/smile.gif" title="Smile"/>
2: <img alt=":)" class="smilies" id="smilie_207" src="https://example.com/smile.gif" title="Smile"/>
3: <img alt=":)" class="smilies" id="smilie_207" src="https://example.com/smile.gif" title="Smile"/>

每个结果的第1组如下:

1: alt=":)" class="smilies" id="smilie_207" src="https://example.com/smile.gif" title="Smile" 
2: alt=":)" class="smilies" id="smilie_207" src="https://example.com/smile.gif" title="Smile"
3: alt=":)" class="smilies" id="smilie_207" src="https://example.com/smile.gif" title="Smile"

答案 1 :(得分:0)

下面将返回带有标签的3个img元素中的每一个:

<\s*img[^>]*\/>

为了获得img标签之间的所有内容,您可以使用以下代码:

(?<=<\s*img)[^>]*(?=\/>)

为了分别获取每个标记中的每个element属性,可以使用:

(\S+)=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?