可选的空白正则表达式

时间:2013-01-12 11:46:48

标签: php regex preg-match removing-whitespace

我在尝试忽略某些字符之间的空格时遇到问题。我一直在谷歌搜索几天,似乎无法找到正确的解决方案。

这是我的代码:

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

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

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

(注意width =“”和src =“”之间没有空格)

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

(注意在width =“”和height =“”之间缺少空格。)

无论如何都要忽略这些角色之间的空格?因为我不是正则表达式专家。

1 个答案:

答案 0 :(得分:82)

如果可以允许空格,请添加\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 * 出现在[和{{1}中的字符中是一个字符类。一个字符类允许其成员出现一次(因此从中移除])并且如果您追加量词(*?+等) *字符类中的任何字符都可以根据量词出现。