可选的空格正则表达式
Posted
技术标签:
【中文标题】可选的空格正则表达式【英文标题】:Optional Whitespace Regex 【发布时间】:2012-12-26 21:53:50 【问题描述】:我在尝试忽略某些字符之间的空格时遇到问题。我在谷歌上搜索了几天,似乎找不到合适的解决方案。
这是我的代码:
// Get Image data
preg_match('#<a href="(.*?)" title="(.*?)"><img src="(.*?)"[\s*][\s*]></a>#', $data, $imagematch);
$image = $imagematch[4];
基本上这些是我的一些场景:
<a href="/wiki/File:Sky1.png" title="File:Sky1.png"><img src="http://media-mcw.cursecdn.com/thumb/5/56/Sky1.png/150px-Sky1.png" ></a>
(注意 和 src="" 之间没有空格)
和
<a href="/wiki/File:TallGrass.gif" title="File:TallGrass.gif"><img src="http://media-mcw.cursecdn.com/3/34/TallGrass.gif" ></a>
(请注意在 和 之间缺少空格。)
是否有忽略这些字符之间的空格?因为我不是正则表达式专家。
【问题讨论】:
【参考方案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 whitespace 或 a * 作为 [
和 ]
中包含的字符是一个字符类。字符类允许其任何成员出现一次(因此从中删除 *
)并且如果您在 ]
任何字符之后附加量词(?
、+
、*
等)在字符类中可以根据量词出现。
【讨论】:
谢谢!我将 [\s*] 更改为 \s?现在可以了! :) 谢谢! @jameslfc19\s?
表示 0 或 1 个空白字符。但是,如果有超过 1 个空格字符怎么办?你想要\s*
,所以它会匹配 0 或 more。顺便说一句,您不想使用正则表达式来解析 html。您想使用these 方法之一。
@naveed-s 我在命名捕获中遇到尾随空格的问题,但无法使其正常工作,请您指导我了解我所缺少的内容吗? Link to RegExp“联系人”一词必须包含在匹配搜索词中,这就是我想要实现的目标。以上是关于可选的空格正则表达式的主要内容,如果未能解决你的问题,请参考以下文章