正则表达式之前没有得到所有

时间:2014-03-11 05:47:01

标签: php regex

我有以下字符串,但我想要A +之前的所有内容。

我错过了什么吗?

字符串:

ABCD WWW 6587 SM A+++AB

正则表达式:

([0-9A-Za-z]*?) A\+

输出:

 SM A+

期望的输出:

ABCD WWW 6587 SM

解决方案:

([0-9A-Za-z].*?) A\+

缺少.(点)

http://www.regexr.com/

3 个答案:

答案 0 :(得分:2)

使用零宽度前瞻断言

^.*(?=A\+)

答案 1 :(得分:2)

您需要考虑这些空间。 .比你的角色类简单得多,像(?=...)这样的先行者可以让你匹配但忽略A+。所以,这个正则表达式有效:

(.*?)(?= A\+)

Regular expression visualization

Debuggex Demo

<强>输出:

ABCD WWW 6587 SM

PHP代码:

$str= "ABCD WWW 6587 SM A+++AB";
preg_match('~(.*?)(?= A\+)~', $str, $matches);
echo $matches[1];

答案 2 :(得分:1)

这样做

$str=" ABCD WWW 6587 SM A+++AB";
echo preg_replace('~(.*)A\+.*~','$1',$str);

输出

ABCD WWW 6587 SM 
相关问题