正则表达式限制匹配之前匹配的字符串

时间:2017-09-12 18:01:50

标签: php regex

我需要匹配一个空格,但在一定条件下限制匹配的空间..

Source :
Code AS-277 Red/Yellow
Code AS 278 Red:
Code AS 279;
Code AS-280 red;
Code AS 279/

UPDATE :
Needed Result:
1. match all word [\w] and few special char [ _-+*] for code 
2. Stop char is [/;)] and COLOR CONSTAN [BLUE|YELLOW|ETC]
3. case insensitive

AS-277 
AS 278
AS 279 
AS-280

我在regex101.com上写道 https://regex101.com/r/S6mvZF/2

4 个答案:

答案 0 :(得分:1)

你可以这样做:

$string = preg_replace('/^.*Code (AS[- ]\d+).*$/m', '$1', $string);

演示:https://regex101.com/r/S6mvZF/4

preg_match_all('/Code (AS[- ]\d+)/, $string, $matches);

然后$matches[1]将包含您的所有匹配项。

两个正则表达式都查找Code AS,然后是连字符或空格,然后至少有一个数字(如果小数位数有限,则可以应用范围{1,3})。第一个正则表达式逐行进行。第二个只捕获每场比赛。

演示:https://regex101.com/r/S6mvZF/5

答案 1 :(得分:1)

好像你可以使用

'~Code\s+([\w+*]+(?:[-\s][\w+*]+)*?\b)\s?(?:red|blue|green|yellow|[);/])~i'

请参阅regex demo

<强>详情

  • Code - 子字符串
  • \s+ - 一个或多个空格
  • [\w+*]+ - 一个或多个字母,数字,_*+
  • (?:[-\s][\w+*]+)*? - 零个或多个(但尽可能少)序列:
    • [-\s] - -或空白
    • [\w+*]+ - 一个或多个字母,数字,_*+
  • \b - 一个单词边界(即必须有一个非单词字符(非字母,非数字和非_
  • \s? - 1或0个空格
  • (?:red|blue|green|yellow|[);/]) - 替代方案之一:redbluegreenyellow(在|之后添加更多内容)或{ {1}} - [);/]);

在比赛中获得第1组值。

答案 2 :(得分:0)

根据您需要的结果,试试这个:

AS[- ][0-9]{3}

答案 3 :(得分:0)

我认为这应该可以解决问题:

Code (AS[ -]\d{3})

它的

  • 单词Code
  • AS后跟空格或超级
  • 3个数字

以下是演示:https://regex101.com/r/S6mvZF/3

祝你好运!