【发布时间】:2012-03-14 13:34:44
【问题描述】:
您好,我需要一个正则表达式,它实际上可以获取在“-”破折号之后插入的任何字母,例如我有一个字符串表示
"UpTown-R" , "Category-C"
我得到的回报是“R”,“C”。
【问题讨论】:
-
如果破折号后面总是有一个字母,则不需要正则表达式。您可以使用
explode,并从每个元素中获取第一个字符。
您好,我需要一个正则表达式,它实际上可以获取在“-”破折号之后插入的任何字母,例如我有一个字符串表示
"UpTown-R" , "Category-C"
我得到的回报是“R”,“C”。
【问题讨论】:
explode,并从每个元素中获取第一个字符。
【讨论】:
你在这里:
(?<=-)(.)
结果在第 1 组中。
测试使用:
【讨论】:
怎么样:
preg_match('/-([a-z])\b/i', $string, $match);
unicode 兼容性:
preg_match('/-(\pL)\b/u', $string, $match);
你要的字母在$match[1]。
【讨论】:
一个简单的
-(.+)$
将获得第一次破折号后的所有内容;请注意,使用此字符串foo-bar-baz,您将匹配-bar-baz,而bar-baz 将在第一组中。
如果你只需要匹配字母,
-([A-Za-z]+)$
足够了。您的结果将在$1 组中。
或者,你为什么不substr你的字符串,从最后一个短划线索引开始到字符串的结尾?
【讨论】:
试试这个正则表达式;
/^.*\-(.*)$/
这样你就可以在破折号之后得到所有东西
【讨论】:
您为什么要为此使用慢速正则表达式,为什么不直接在“-”上分解字符串?
$str = 'UpTown-R';
$arr = explode('-',$str);
$letter = $arr[1];
$letterSage = $arr[1][0]; // to be sure you only get 1 character.
这同样有效!在到处写正则表达式之前,想想这些明智的话:“如果你的解决方案包含超过 3 个正则表达式,那么你就是问题的一部分”
【讨论】: