可选的空格正则表达式

Posted

技术标签:

【中文标题】可选的空格正则表达式【英文标题】:Optional Whitespace Regex 【发布时间】:2012-12-26 21:53:50 【问题描述】:

我在尝试忽略某些字符之间的空格时遇到问题。我在谷歌上搜索了几天,似乎找不到合适的解决方案。

这是我的代码:

// Get Image data
preg_match('#<a href="(.*?)" title="(.*?)"><img  src="(.*?)"[\s*][\s*]></a>#', $data, $imagematch);
$image = $imagematch[4];

基本上这些是我的一些场景:

 <a href="/wiki/File:Sky1.png" title="File:Sky1.png"><img  src="http://media-mcw.cursecdn.com/thumb/5/56/Sky1.png/150px-Sky1.png" ></a>

(注意 和 src="" 之间没有空格)

<a href="/wiki/File:TallGrass.gif" title="File:TallGrass.gif"><img  src="http://media-mcw.cursecdn.com/3/34/TallGrass.gif" ></a>

(请注意在 和 之间缺少空格。)

是否有忽略这些字符之间的空格?因为我不是正则表达式专家。

【问题讨论】:

【参考方案1】:

如果可以允许空格,请添加\s?

\s 代表空白

? 表示前面的字符可能出现一次,也可能不出现。

如果允许有多个空格并且是可选的,请使用\s*

* 表示前面的字符可以出现零次或多次。

'#<a href\s?="(.*?)" title\s?="(.*?)"><img alt\s?="(.*?)" src\s?="(.*?)"[\s*]width\s?="150"[\s*]height\s?="(.*?)"></a>#'

允许在属性名和 = 之间有一个可选的空格。

如果您还想在 = 之后添加一个可选空格,请在其后添加一个 \s?

同样,如果您有可选字符,则可以使用 ?(如果最大出现次数为 1)或 *(如果最大出现次数不受限制,则在可选字符之后)。

而您的实际问题是 [\s*] 导致出现 a whitespacea * 作为 [] 中包含的字符是一个字符类。字符类允许其任何成员出现一次(因此从中删除 *)并且如果您在 ] 任何字符之后附加量词(?+* 等)在字符类中可以根据量词出现。

【讨论】:

谢谢!我将 [\s*] 更改为 \s?现在可以了! :) 谢谢! @jameslfc19 \s? 表示 0 或 1 个空白字符。但是,如果有超过 1 个空格字符怎么办?你想要\s*,所以它会匹配 0 或 more。顺便说一句,您不想使用正则表达式来解析 html。您想使用these 方法之一。 @naveed-s 我在命名捕获中遇到尾随空格的问题,但无法使其正常工作,请您指导我了解我所缺少的内容吗? Link to RegExp“联系人”一词必须包含在匹配搜索词中,这就是我想要实现的目标。

以上是关于可选的空格正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配逗号分隔的数字与可选的小数部分

正则表达式.如何在正则表达式末尾添加可选字符[重复]

用于在字符中获取字符串的正则表达式,第一个字符集在 Presto/Athena 中是可选的

正则表达式验证序列

django - 可选 url 参数的正则表达式

django手机号码正则表达式