php - 可选的空格正则表达式

标签 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];

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

 <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 whitespacea * 作为包含在 中的字符出现[] 是一个字符类。一个字符类允许其任何成员出现一次(因此从中删除 *)并且如果您附加一个量词(?+* etc) 在 ] 之后的任何字符都可以根据量词出现。

关于php - 可选的空格正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14293024/

相关文章:

php - 了解 preg_match 公式

php - Laravel ORM,日期比较

php - 用于创建新帖子的 AJAX 表单 (WordPress)

javascript - 正则表达式不起作用 - 最少 8 个字符、1 个数字、1 个特殊字符和 1 个大写字母

r - 如果模式来自向量,如何替换字符串?

java - Eclipse 使用正则表达式查找/替换整行

文件名的 PHP 正则表达式

正则表达式 - 任何字符的字边界

php - 如何在 Yii 中获取当前的 Action id?

php - php 的 session 重定向返回 undefined variable 并调用成员函数错误