Php 正则表达式限制与之前匹配的字符串的匹配
我需要匹配一个空格,但在某些条件下限制匹配的空格 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 资料来源: 代码AS-277红色/黄色 代码为278红色: 代码为279; 代码AS-280红色; 代码为279/ 更新: 所需成果: 1.为代码匹配所有单词[\w]和少数特殊字符[-+*] 2.停止字符为[/;)],颜色为康斯坦色[蓝色|黄色|等] 3.不区分大小写 AS-277 AS 278 AS 279 AS-280 我在regex101.com上写作Php 正则表达式限制与之前匹配的字符串的匹配,php,regex,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|
根据需要的结果,尝试以下操作:
AS[- ][0-9]{3}
我认为这应该起作用:
Code (AS[ -]\d{3})
它是
- 字码
- 后面跟着空格或催眠
- 3个数字
$string = preg_replace('/^.*Code (AS[- ]\d+).*$/m', '$1', $string);
演示:
或
然后,$matches[1]
将拥有所有匹配项
两个正则表达式都将代码查找为
,然后是连字符或空格,然后至少查找一个数字(如果小数位数有限,则可以应用范围{1,3}
)。第一个正则表达式逐行进行。第二个仅捕获每个匹配
演示:您似乎可以使用
'~Code\s+([\w+*]+(?:[-\s][\w+*]+)*?\b)\s?(?:red|blue|green|yellow|[);/])~i'
见
详细信息
-子字符串code
-1个或多个空格\s+
-1个或多个字母、数字、[\w+*]+
、
或*
+
-零个或更多(但尽可能少)序列:(?:[-\s][\w+*]+)*?
-a[-\s]
或空白-
-1个或多个字母、数字、[\w+*]+
、
或*
+
-单词边界(即必须有非单词字符(非字母、非数字和非\b
)
-1或0个空格\s?
-备选方案之一:(?:红色|蓝色|绿色|黄色|[)/)
,红色
,蓝色
,绿色
(在黄色
之后添加更多内容),或[)/][/code>-a
,)
代码>或
/
在匹配时获取组1的值。是否总是
为?它也总是3位数吗?在这两个部分中可以找到哪些可能的字符?可能会更好。不。。对不起,简单的样品@chris85回答对我有用。@WiktorStribiż将我的样本简单化。我还有一个问题:(你能帮我检查一下regex101上的这个链接吗?@chris85你的答案对我有用..但是如果数据发生变化,我会有一些问题..请看一下你能不能定义更多的模式?也许是吗?非常感谢chris..问题是我需要将代码与[\w\s_-]匹配+对于所有字符串和空格以及少数特殊字符..此处示例..@ketutwidara对于该字符类,您允许使用大量字符,但需要更加严格。使用可选的非捕获组。Hi cris.\K meta sequences..来自wiktor对我的问题的评论..我的意思是..很难解释rexex问题..:D感谢您的帮助..hi@Wiktor不区分大小写时为什么不工作..Demo:@KetutWidarta您的意思是问为什么code T1\u GPlus)
不匹配?因为G
之后没有单词边界。此时,您需要定义需求。我假设你只需要匹配大写字母。我更新了我的问题以了解更多的细节。。所需结果:1。为代码2匹配所有单词[\w]和少数特殊字符[-+*]。停止字符为[/;)],颜色为康斯坦色[蓝色|黄色|等]3。不区分大小写Ethaks wiktor。。我最好的尝试是Code\s+(\K[\w\-\+*]+(?:[-\s][0-9A-Z]+)*\b)[?(?:红色|蓝色|红色|)|)但如果我将反斜杠作为停止符,则仍然与反斜杠不匹配。其他休息。。很好。。完美地工作。。非常感谢Wiktor。
'~Code\s+([\w+*]+(?:[-\s][\w+*]+)*?\b)\s?(?:red|blue|green|yellow|[);/])~i'