使用preg_match在php中使用正则表达式

时间:2018-02-18 10:53:46

标签: php regex

我正在尝试创建一个php文件,因此它可以接受正则表达式的单词(a + b)(ab + ba)* 我正在使用preg_match,到目前为止我已经提出了这个

    $subject = "a+b";
    $pattern = '(([a]{1}\+[b]{1})?([ab]{1}\+[ba]{1}))';
    preg_match($pattern, $subject, $matches);
    print_r($matches);

我不确定我是否完全理解它是如何工作的但是现在几个小时我想弄清楚..我怎么做才能让它满足我的条件

我想匹配(a + b)(ab + ba)*,其中第一个括号(a + b)是必需的,而第二个括号(ab + ba)上的*表示可能有零个或多个实例它的。 所以它应该像这样工作

   $subject= "(a+b)"
   Match


   $subject= "(a+b)(ab+ba)"
   Match


   $subject= "(a+b)(ab+ba)(ab+ba)"
   Match

   $subject= "(ab+ba)"
   No Match

   $subject= ""
   No Match

1 个答案:

答案 0 :(得分:2)

(([a]{1}\+[b]{1})?([ab]{1}\+[ba]{1}))

[a]{1}character class中的1个字符)可以写为a

[b]{1}可以写成b

[ab](字符类中的2个字符)表示a或b

我认为您必须逃避左括号\(,否则您将启动一个捕获组。

如果我没有记错的话,这可能与你想要的相符:

^\(a\+b\)(?:\(ab\+ba\))*$

第二部分是非捕获组(?:\(ab\+ba\))*,重复零次或多次。

Php test ouput