php 可选空格正则表达式

5q4ezhmt  于 10个月前  发布在  PHP
关注(0)|答案(1)|浏览(56)

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

// 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=""之间没有空格。)
有没有办法忽略这些字符之间的空格?因为我不是正则表达式Maven。

axzmvihb

axzmvihb1#

如果允许空格,则添加\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 whitespace或**a *,因为[中包含的字符和]是一个字符类。一个字符类允许它的任何成员出现一次(所以从它删除*),如果你在]之后附加一个量词(?+*等),字符类中的任何字符都可以根据量词出现。

相关问题