我遇到了一个问题,试图忽略某些字符之间的空白。我在谷歌上搜索了几天,似乎找不到正确的解决方案。
下面是我的代码:
// 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 *作为字符包含在[
和]
是一个字符类。字符类允许其任何成员出现一次(因此删除*
),如果您在]
之后附加量词(?
, +
, *
等),字符类中的任何字符都可以根据量词出现。