2016-03-04 62 views
1

Sigma = {a,b}。正則表達式RE = (ab)(ab)*(aa|bb)*b over Sigma圓括號是否改變正則表達式的長度?

  1. 在RE表示的集合中給出一個長度爲5的字符串。 正確答案:abaab 我的回答:(AB)AAB

我放在括號那裏,因爲他們是在RE。我明白爲什麼我不需要,但是我的回答不正確?我使用RegEx對其進行了測試,並且表達式(ab)aab與文本abaab匹配,但是當我將其撤消時,它不匹配。

+0

看看http://www.regular-expressions.info它包含教程,解釋,例子等。 – axiac

+0

@ user3410845請接受答案 –

回答

1

你的回答是錯誤的,因爲括號不屬於你的符號集。字符串(ab)aab不能僅使用{a,b}集中的符號生成。

此外,您被要求提供5個符號的字符串,但(ab)aab的長度爲7

圓括號在regex中有特殊含義。他們創建子正則表達式和捕獲組。例如,(ab)*表示ab可以匹配任意次數,包括零。沒有括號,ab*意味着regex匹配一個a後跟任意數量的b s。這是一個不同的表達。

例如:

  • 正則表達式(ab)*空串(ab零次),abababababababababab等相匹配;
  • 正則表達式匹配ab*a(後面的零個b S),ababbabbbabbbb等。

如果您僅查找子正則表達式,則示例中的第一組括號無用。 (ab)ab表達式僅匹配ab字符串。但是它們可以用來捕獲字符串的匹配部分,並將其重新用於反向引用或替換。

括號用於正則表達式中的子表達式時,它們是元字符,不匹配字符串中的任何內容。爲了匹配一個開括號字符((在字符串中找到),您必須在regex\(中將其轉義。

Sigma = { 'a', 'b' }匹配正則表達式(ab)(ab)*(aa|bb)*b那幾個字符串:abbababbabababababbababababaabbaaaabbb

最後的字符串(ababababaabbaaaabbb)的regex片相匹配,如下所示:

ab   - (ab) 
ababab  - (ab)* - ('ab' 3 times) 
aabbaaaabb - (aa|bb)* - ('aa' or 'bb', 5 times in total) 
b    - b 

regex相匹配的字符串(ab)aab\(ab\)(ab)*(aa|bb)*b但在這種情況下
Sigma = { 'a', 'b', '(', ')' }

+0

爲什麼(ab)aab的長度是7 ? – jtetra13

+0

錯誤...因爲它包含7個字符?它是一個常規字符串,而不是「正則表達式」。它應該在'{a,b}'字母上;它包含額外的符號,但這並不意味着我們可以忽略它們。 – axiac

+0

因此,它的長度是5,它必須是類似於(ab)b的東西嗎? – jtetra13

1

()是正則表達式的語法和有其語義,你可以看看herehere

在正則表達式^&等保留字相似,你必須專用手柄使用正則表達式匹配它們,例如:Regex to Match Symbols: !$%^&*()_+|~-=`{}[]:";'<>?,./

而且,特別是在你的問題情境,()不應該出現的部分字符串,因爲它不是在字符集(字母){a,b}。你提供的字符串長度是7而不是5,所以說它是錯的是正確的。