2013-03-24 52 views
0

我不確定這個RegEx比賽什麼的:RegEx(a + b)^ n(c + d)^ m匹配的是什麼?

(a+b)^n(c+d)^m 

我知道+元字符的意思是「一次或多次前面的模式」。因此,a+將匹配一個或多個a,而a*也包含空字符串。

但我認爲,在這種情況下,正則表達式表示a or b to the nth time concatenated with c or d to the mth time,所以它會像匹配這些字符串:

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) 
... 

這是正確的嗎?如果不是,任何人都可以提供什麼RegEx 確實匹配的例子嗎?

+3

你從哪裏得到這個表情?它看起來不像任何引擎使用的方言,而更像一些計算機科學文本所使用的慣例(儘管我從來沒有見過「+」來表示「或」)。 – 2013-03-24 20:50:32

+0

@KonradRudolph它來自計算機科學文本(更確切地說,是我在大學讀的課程中的文本)關於常規語言 – federicot 2013-03-24 20:53:09

+4

在這種情況下,本書應該先解釋它們用來表示正則表達式的約定。順便說一句,你的嘗試解釋聽起來似乎是合理的。 – 2013-03-24 20:57:03

回答

0

顯然(a+b)^n(c+d)^m指「n插槽無序一個的和b的其次是m無序的插槽c的和d的「

例如(a+b)^10(c+d)^5的示例應該是:aaaababbbadcccd

0

它看起來並不像給定的不正確使用一個有效的正則表達式^

^要麼是裏面的[]這樣的[^ A],或在正則表達式的一開始。 +僅表示一個或多個字符出現。

如果^ N裝置可以重複n次,然後這些將是符合條件:

aaaaaabccccccccd, aaaaaabaaaaaabaaaaaabccccccccdccccccccd

+0

它*是*有效,只是沒有意義。但是,當然你的回答忽略了以前的評論可能並不適用。這裏的「^ n」表示「重複字符串」。 – 2013-03-24 21:02:06

+0

如果是這種情況,那麼aaaaaabccccccccd會匹配,所以aaaaaabaaaaaabaaaaaabccccccccdccccccccdccccccccdccccccccd – 2013-03-24 21:03:54

0

如果您使用帶有'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中可用。

相關問題