Php 括号内的Regex单词边界选项不起作用?

Php 括号内的Regex单词边界选项不起作用?,php,regex,Php,Regex,有一件事我不能理解边界这个词 $input="157-XYZ"; preg_match("/[^\d+\-]\bRDS|xyz|ABC\b/i", $input, $output); 上述preg_match匹配$input中的XYZ 但是,如果我将替代项放在括号/[^\d+\-]\b(RDS | xyz | ABC)\b/I中,它似乎不会返回任何内容。我不能在这里使用括号从$output[1]检索结果吗?此正则表达式错误: preg_match("/[^\d+\-]\bRDS|xyz|ABC

有一件事我不能理解边界这个词

$input="157-XYZ";
preg_match("/[^\d+\-]\bRDS|xyz|ABC\b/i", $input, $output);
上述
preg_match
匹配
$input
中的XYZ

但是,如果我将替代项放在括号
/[^\d+\-]\b(RDS | xyz | ABC)\b/I
中,它似乎不会返回任何内容。我不能在这里使用括号从
$output[1]
检索结果吗?

此正则表达式错误:

preg_match("/[^\d+\-]\bRDS|xyz|ABC\b/i", $input, $output);
因为:
[^\d+\-]
表示匹配之外的所有内容:

  • 数字
  • 文字
    +
  • 文字
    -
  • 您只需使用:

    preg_match("/^\d+\-\b(RDS|xyz|ABC)\b/i", $input, $output);
    

    当前您的正则表达式匹配:
    [^\d+\-]\bRDS
    xyz
    ABC\b
    。所以字符串'XYZ'当然是匹配的。描述你想要匹配的模式,也许我们可以帮助你纠正你的尝试。你怎么可能知道这就是他想要匹配的?你如何将
    [^\d+\-]
    转换成
    ^\d+\-
    ?一个是负面角色类,另一个是锚定角色类sequence@anubhava是的,我被
    []
    弄糊涂了。感谢您整理。如果您想匹配一个或多个非数字,请使用
    [^\d]+
    或更好的
    \d+
    @anubhava,抱歉,公平竞争;)最初没有注意到
    $input