【问题标题】:Optional Whitespace Regex可选的空格正则表达式
【发布时间】:2012-12-26 21:53:50
【问题描述】:

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

这是我的代码:

// 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="" 之间缺少空格。)

是否有忽略这些字符之间的空格?因为我不是正则表达式专家。

【问题讨论】:

    标签: php regex preg-match removing-whitespace


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我将 [\s*] 更改为 \s?现在可以了! :) 谢谢!
    • @jameslfc19 \s? 表示 0 或 1 个空白字符。但是,如果有超过 1 个空格字符怎么办?你想要\s*,所以它会匹配 0 或 more。顺便说一句,您不想使用正则表达式来解析 HTML。您想使用these 方法之一。
    • @naveed-s 我在命名捕获中遇到尾随空格的问题,但无法使其正常工作,请您指导我了解我所缺少的内容吗? Link to RegExp“联系人”一词必须包含在匹配搜索词中,这就是我想要实现的目标。
    猜你喜欢
    • 2018-08-16
    • 1970-01-01
    • 2012-02-02
    • 2015-12-13
    • 1970-01-01
    相关资源
    最近更新 更多