我在尝试忽略某些字符之间的空格时遇到问题。我已经用谷歌搜索了几天,但似乎找不到合适的解决方案。
这是我的代码:
// 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=""之间没有空格。)
有没有办法忽略这些字符之间的空格?因为我不是正则表达式专家。
最佳答案
如果可以允许空格,则添加 \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 * 作为包含在 中的字符出现[
和 ]
是一个字符类。一个字符类允许其任何成员出现一次(因此从中删除 *
)并且如果您附加一个量词(?
、+
、 *
etc) 在 ]
之后的任何字符都可以根据量词出现。
关于php - 可选的空格正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14293024/