57

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

这是我的代码:

// 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="" 之间没有空格。)

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

4

1 回答 1

138

\s?如果可以允许空格,则添加一个。

\s代表空白

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

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

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

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

允许属性名称和 = 之间的可选空格。

如果你想在=也后面有一个可选的空格,在它后面加上一个\s?

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

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

于 2013-01-12T11:49:43.607 回答