我需要匹配一个空格,但在一定条件下限制匹配的空间..
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
答案 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}
)。第一个正则表达式逐行进行。第二个只捕获每场比赛。
答案 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|[);/])
- 替代方案之一:red
,blue
,green
,yellow
(在|
之后添加更多内容)或{ {1}} - [);/]
,)
或;
。在比赛中获得第1组值。
答案 2 :(得分:0)
根据您需要的结果,试试这个:
AS[- ][0-9]{3}
答案 3 :(得分:0)
我认为这应该可以解决问题:
Code (AS[ -]\d{3})
它的