使用preg_match的php正则表达式
我正在尝试创建一个php文件,这样它就可以接受word作为正则表达式(a+b)(ab+ba)* 我正在使用preg_match,到目前为止我已经想到了这个使用preg_match的php正则表达式,php,regex,Php,Regex,我正在尝试创建一个php文件,这样它就可以接受word作为正则表达式(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); 我不确定我是否完全理解它是如何工作的,但现在我已
$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
在([a]{1}\+[b]{1})中([ab]{1}\+[ba]{1}))
[a]{1}
(a中的1个字符)可以写成a
[b]{1}
可以写成b
[ab]
(字符类中的两个字符)表示a或b
我认为你必须跳出开头的括号\(
),否则你将启动一个捕获组
如果我没有弄错的话,这可能符合您的要求:
第二部分在非捕获组(?:\(ab\+ba\)*
中,重复零次或多次
您想匹配的内容不太清楚,您可以添加其他示例吗?@casimirithippolyte我已经编辑了原始帖子,请看一看。在您的代码片段中,
$subject
不包含括号,但在接下来的示例中包含括号。哪一个是正确的?我的错,第二个是正确的它必须包含括号,我只是测试它是否适用于a+b,而它不应该也应该只适用于(a+b)。@revoYou需要转义特殊字符(?:\(a\+b\)(?:\(ab\+ba\)*
这很完美,但还有一个问题它也适用于(a+b)(,(a+b)a等词。就像它适用于(a+b)一样之后呢that@YousufKhan然后你可以在字符串的开头^
和结尾$
使用锚。我已经更新了我的答案。是的,它起作用了,我在开头放了$,但它不起作用。