Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式限制与之前匹配的字符串的匹配_Php_Regex - Fatal编程技术网

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

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|

我需要匹配一个空格,但在某些条件下限制匹配的空格

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上写作

根据需要的结果,尝试以下操作:

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
    -子字符串
  • \s+
    -1个或多个空格
  • [\w+*]+
    -1个或多个字母、数字、
    *
    +
  • (?:[-\s][\w+*]+)*?
    -零个或更多(但尽可能少)序列:
    • [-\s]
      -a
      -
      或空白
    • [\w+*]+
      -1个或多个字母、数字、
      *
      +
  • \b
    -单词边界(即必须有非单词字符(非字母、非数字和非
  • \s?
    -1或0个空格
  • (?:红色|蓝色|绿色|黄色|[)/)
    -备选方案之一:
    红色
    蓝色
    绿色
    黄色
    (在
    之后添加更多内容),或
    [)/][/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'