可选的空格正则表达式

2022-08-30 09:24:01

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

这是我的代码:

// 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>

(请注意,宽度=“”和高度=“”之间缺少空格。

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


答案 1

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

\s 代表空格

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

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

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

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

允许在属性名称和 = 之间留出可选空格。

如果希望在 also 后面加上一个可选空格,请在它后面添加一个空格。=\s?

同样,只要有可选字符,就可以在最大出现次数为 1 或最大出现次数不受限制的情况下使用可选字符。?*

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


答案 2

推荐