Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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/unix/3.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
Regex 正则表达式:前后的a数相同_Regex - Fatal编程技术网

Regex 正则表达式:前后的a数相同

Regex 正则表达式:前后的a数相同,regex,Regex,我试图找到的正则表达式的形式是a^k s a^k,k>=1,其中s是字母表{a,b}上的任意字符串。例如,aaaabbbaaa使用该语言是因为它可以表示为^3 abbb a^3 编辑:限制为只能使用连接ab、并集a | b、星形a*和+a+。 如何为此编写正则表达式 编辑: 我是对的,aa | b*a+确实捕捉到了这一点。这就是你要找的吗 ^(a+)[ab]+\1$ a+a | b*a+怎么样?那将是一个或多个a,后面跟着a或b零次或多次,后面跟着a一次或多次?这样,前面和后面至少有一个^1,

我试图找到的正则表达式的形式是a^k s a^k,k>=1,其中s是字母表{a,b}上的任意字符串。例如,aaaabbbaaa使用该语言是因为它可以表示为^3 abbb a^3

编辑:限制为只能使用连接ab、并集a | b、星形a*和+a+。 如何为此编写正则表达式

编辑:
我是对的,aa | b*a+确实捕捉到了这一点。

这就是你要找的吗

^(a+)[ab]+\1$
a+a | b*a+怎么样?那将是一个或多个a,后面跟着a或b零次或多次,后面跟着a一次或多次?这样,前面和后面至少有一个^1,因此每个字符串都将使用您的语言,因为+是一次或多次,所以它可以从^1到^无穷大。 如果s的长度必须至少为1,请将*更改为a+


编辑:虽然你可以在末尾去掉加号,但你的正则表达式仍然可以工作。

我如何只使用操作符编写正则表达式:联合a | b、连接ab、加a+和星a*?@Solistie:你没有提到任何限制。对于aa | b*a+,我认为这意味着s必须在特定模式下重复k次。我不知道我怎么能捕捉aabbbaaa,因为在这个例子中s是abbb,我怎么能让aa | b*a^3捕捉到这个?如果我错了,请纠正我!我想你是根据你的编辑算出的,但是你只需要应用你的模式一次:你的第一个a将得到第一个a。a | b将获得所有字母,直到最后一个a,然后你的最后一个a将匹配最后一个a。实际上,你甚至不需要+,只需要aa | b*a,因为你的语言本质上是a s a。如果s是例如{b,c},那么语言a^k s a^k将是上下文敏感的,因此严格的正则表达式无法匹配,尽管现代正则表达式引擎可以匹配它。