可选的空白正则表达式

jam*_*c19 35 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];
Run Code Online (Sandbox Code Playgroud)

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

 <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>
Run Code Online (Sandbox Code Playgroud)

(注意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>
Run Code Online (Sandbox Code Playgroud)

(注意在width =""和height =""之间缺少空格.)

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

Nav*_*d S 88

\s?如果允许空格,请添加一个.

\ s代表白色空间

?说前面的字符可能发生一次或不发生.

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

*说前面的字符可以出现零次或多次.

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

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

如果你想要一个可选空格,=也可以\s?在它之后添加一个空格.

同样,只要有可选字符,只要?最大出现次数为1,或者*最大出现次数不受限制,就可以使用可选字符.

而你的实际问题是[\s*]导致出现空格或*作为字符括起来[并且]是一个字符类.字符类允许其任何成员的一次出现(因此除去*来自它),如果你追加一个量词(?,+,*后等)]在字符类可以根据量词发生的任何字符(多个).

  • @ jameslfc19`\ s?`表示0或1个空白字符。但是,如果有超过1个空格字符怎么办?您需要`\ s *`,以便匹配0或** more **。顺便说一句,您不想使用正则表达式来解析HTML。您要使用[这些](http://stackoverflow.com/q/3577641/1592648)方法之一。 (2认同)