可选的空白正则表达式


Optional Whitespace Regex

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

下面是我的代码:

// 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="和身高="。)

是否可以忽略这些字符之间的空白?因为我不是一个Regex专家

如果允许,添加一个's?

's表示空白

?表示前一个字符可以出现一次,也可以不出现。

如果允许多个空格并且是可选的,则使用's*

*表示前一个字符可以出现0次或多次。

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

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

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

同样,无论在哪里使用可选字符,如果最大出现次数是1,则可以使用?;如果最大出现次数是无限的,则可以在可选字符后面使用*

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