Regex 正则表达式(a+;b)^n(c+;d)^m与什么匹配?

Regex 正则表达式(a+;b)^n(c+;d)^m与什么匹配?,regex,Regex,我不确定这与什么匹配: 我知道+元字符的意思是“前一个模式的一次或多次”。因此,a+将匹配一个或多个as,而a*也包括空字符串 但我认为在这种情况下,正则表达式的意思是将a或b连接到第n个时间,并将c或d连接到第m个时间,因此它将匹配如下字符串: aaaacc (n=4, m=2) bbbbbdddd (n=5, m=4) aaaddddd (n=3, m=5) bc (n=1, m=1) aaaaaaaaaaaaccccc (n=12, m=5) ... 这是正确的吗?如果不是,有人能提供这

我不确定这与什么匹配:

我知道
+
元字符的意思是“前一个模式的一次或多次”。因此,
a+
将匹配一个或多个
a
s,而
a*
也包括空字符串

但我认为在这种情况下,正则表达式的意思是将a或b连接到第n个时间,并将c或d连接到第m个时间,因此它将匹配如下字符串:

aaaacc (n=4, m=2)
bbbbbdddd (n=5, m=4)
aaaddddd (n=3, m=5)
bc (n=1, m=1)
aaaaaaaaaaaaccccc (n=12, m=5)
...

这是正确的吗?如果不是,有人能提供这个正则表达式匹配的例子吗?

由于使用了不正确的^

^应该位于[]的内部,如[^a],或者位于正则表达式的最开始处。 +仅表示一个字符出现一次或多次

如果^n means可以重复n次,则这些将是匹配项:

AAAAA BCCCCD, aaaaaaaaaaaaaaaaaababababababababccccccccccccccd

显然
(a+b)^n(c+d)^m
表示“
n
无序a和b的插槽,然后是
m
无序c和d的插槽”


e、 g.
(a+b)^10(c+d)^5
的一个例子是:
aaaababbadcccd
如果您使用带有“m”选项的Perl正则表达式,例如
/(a+b)^n(c+d)^m/m
,则 “^”将匹配行的内部开头。所以

/
 (a+b)    # Match one or more as followed by b
 ^n       # Match the beginning of a line followed by a literal n.
 (c+d)    # Match one or more cs followed by d
 ^m       # Match the beginning of a line followed by a literal m.
/mx

(a+b)和(c+d)将分别以1美元和2美元的价格提供。

您从何处获得该表达式?它看起来不像是任何引擎使用的方言,更像是一些计算机科学文本使用的惯例(尽管我从未见过用
+
来表示“或”)。@KonradRudolph它来自计算机科学文本(更准确地说,是我在大学上的一节课的文本)关于正则语言在这种情况下,这本书之前应该解释他们用来表示正则表达式的约定。顺便说一句,你尝试的解释听起来似乎有道理。@KonradRudolph:与其评论每个人的答案都是错误的,因为他们没有阅读评论,也许你应该建议OP编辑,问他们想要回答的实际问题。这个问题问这个正则表达式匹配什么,回答了两次。(我删除了我的,因为你这么快就否决了它,顺便说一句,这有点粗鲁。)@Ken抱歉,但我不同意这是粗鲁的:这是否决的目的;它们不是针对个人的,只是一种表示答案是错误的方式。虽然我同意OP应该编辑这个问题,但你似乎忽视了这里评论的目的:讨论不清楚的地方并提供澄清。至于术语,OP使用术语“regex”并没有错,尽管该术语通常用于表示正则表达式的特定方言,并且他的用法通常被称为“正则语言”。它是有效的,只是没有意义。当然,你的回答忽略了前面的评论,这可能并不适用。“^n”在这里表示“n个字符串重复”。如果是这种情况,那么AAAAA BCCCCCCD将匹配,AAAAA BAAAAAAAAABCCCCCCCCCCCCD也将匹配
/
 (a+b)    # Match one or more as followed by b
 ^n       # Match the beginning of a line followed by a literal n.
 (c+d)    # Match one or more cs followed by d
 ^m       # Match the beginning of a line followed by a literal m.
/mx