为什么我的正则表达式无法匹配包含选项卡的字符串?

时间:2015-06-22 19:23:36

标签: regex perl

我有一个正则表达式,但它无法正常工作。正则表达式是:

m/^alias ([^\s]*) (.*) (<.*>)/

我在mutt文件上测试了我的表达式,将其转换为vcard。我的测试字符串是:

alias     john smith <john.smith@test.com>

但在aliasjohn之间我有一个标签,([^\s]*)找不到标签。为什么不?通常\s匹配空格或制表符,不是吗?

2 个答案:

答案 0 :(得分:2)

模式中alias后面有一个文字空格,因此匹配字符串的前6个字符必须为“a”,“l”,“{{1 “}”,“i”,“a”和空格。但是你的字符串的第六个字符是一个标签。我想你想要以下内容:

s

my ($gname, $sname, $addr) = /^alias\s+(\S+)\s+(\S+)\s+<(.*)>/;

my ($name, $addr) = /^alias\s+([^<\s]+(?:\s+[^<\s])*)\s+<(.*)>/ 相当于\S。)

答案 1 :(得分:0)

<?php $RankSql = 'SELECT * FROM games WHERE Genre LIKE "%'.$Genre.'%" ORDER BY Score DESC limit 5'; $Rankresult = mysql_query($RankSql); $games = array(); while($RankOrder = mysql_fetch_array($Rankresult)) { $games[] = $RankOrder; }; // ex: third game (remember, arrays start at zero) echo $games[2]['Game']; ?> 是否定的字符类。 [^...]是空白字符的通配符(包括标签:\s)。 [ \t\r\n\f]将捕获每个非空格字符。

作为旁注,大写速记字符类会使其无效。因此,([^\s]*)[^\s]相同。

相关问题