讓Sigma = {a,b}
。正則表達式RE = (ab)(ab)*(aa|bb)*b over Sigma
。圓括號是否改變正則表達式的長度?
- 在RE表示的集合中給出一個長度爲5的字符串。 正確答案:abaab 我的回答:(AB)AAB
我放在括號那裏,因爲他們是在RE。我明白爲什麼我不需要,但是我的回答不正確?我使用RegEx對其進行了測試,並且表達式(ab)aab與文本abaab匹配,但是當我將其撤消時,它不匹配。
讓Sigma = {a,b}
。正則表達式RE = (ab)(ab)*(aa|bb)*b over Sigma
。圓括號是否改變正則表達式的長度?
我放在括號那裏,因爲他們是在RE。我明白爲什麼我不需要,但是我的回答不正確?我使用RegEx對其進行了測試,並且表達式(ab)aab與文本abaab匹配,但是當我將其撤消時,它不匹配。
你的回答是錯誤的,因爲括號不屬於你的符號集。字符串(ab)aab
不能僅使用{a,b}
集中的符號生成。
此外,您被要求提供5個符號的字符串,但(ab)aab
的長度爲7
。
圓括號在regex
中有特殊含義。他們創建子正則表達式和捕獲組。例如,(ab)*
表示ab
可以匹配任意次數,包括零。沒有括號,ab*
意味着regex
匹配一個a
後跟任意數量的b
s。這是一個不同的表達。
例如:
(ab)*
空串(ab
零次),ab
,abab
,ababab
,abababab
等相匹配;ab*
a
(後面的零個b
S),ab
,abb
,abbb
,abbbb
等。如果您僅查找子正則表達式,則示例中的第一組括號無用。 (ab)
和ab
表達式僅匹配ab
字符串。但是它們可以用來捕獲字符串的匹配部分,並將其重新用於反向引用或替換。
括號用於正則表達式中的子表達式時,它們是元字符,不匹配字符串中的任何內容。爲了匹配一個開括號字符(
(在字符串中找到),您必須在regex
:\(
中將其轉義。
在Sigma = { 'a', 'b' }
匹配正則表達式(ab)(ab)*(aa|bb)*b
那幾個字符串:abb
,ababb
,abababababb
,ababababaabbaaaabbb
。
最後的字符串(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', '(', ')' }
()
是正則表達式的語法和有其語義,你可以看看here和here
在正則表達式^
或&
等保留字相似,你必須專用手柄使用正則表達式匹配它們,例如:Regex to Match Symbols: !$%^&*()_+|~-=`{}[]:";'<>?,./
而且,特別是在你的問題情境,()
不應該出現的部分字符串,因爲它不是在字符集(字母){a,b}
。你提供的字符串長度是7而不是5,所以說它是錯的是正確的。
看看http://www.regular-expressions.info它包含教程,解釋,例子等。 – axiac
@ user3410845請接受答案 –