包含 a 和偶数个 b 的字符串的正则表达式
Regular expression for strings that cointains a and an even number of b's
如何定义以下语言的正则表达式?
L = {w ∈ {a, b}* | w 有偶数个 b}
我尝试创建相关的自动机:
然后我尝试应用该算法从 DFA 获取正则表达式,我得到这个公式:a*ba*b
.
这可能是正确答案吗?
你很接近,但你需要在你的 pattern.You 末尾有一个 a*
还需要锚点 ^
和 $
来指定你的开始和结束string.Then 您可以将所有正则表达式放在一个捕获组中,如果 b
则使用 *
来匹配任何偶数,如果 b
则使用 a*
来匹配零个数]:
^((a*ba*ba*)*|a*)$
注意:|
是一个逻辑或,使您的正则表达式引擎匹配 (a*ba*ba*)*
或 a*
.
你也可以让它更优雅,但由于你对正则表达式不是很熟悉,所以我建议使用前面的模式。
例如以下将起作用:
^(((a*b){2})*)a*$
这是最好的解决方案,因为我遵循从 DFA 到正则表达式的转换算法(用笔完成):
(a*|ba*b)*
你可以测试一下here and you can learn about this algorithm watching this video。
如何定义以下语言的正则表达式?
L = {w ∈ {a, b}* | w 有偶数个 b}
我尝试创建相关的自动机:
然后我尝试应用该算法从 DFA 获取正则表达式,我得到这个公式:a*ba*b
.
这可能是正确答案吗?
你很接近,但你需要在你的 pattern.You 末尾有一个 a*
还需要锚点 ^
和 $
来指定你的开始和结束string.Then 您可以将所有正则表达式放在一个捕获组中,如果 b
则使用 *
来匹配任何偶数,如果 b
则使用 a*
来匹配零个数]:
^((a*ba*ba*)*|a*)$
注意:|
是一个逻辑或,使您的正则表达式引擎匹配 (a*ba*ba*)*
或 a*
.
你也可以让它更优雅,但由于你对正则表达式不是很熟悉,所以我建议使用前面的模式。
例如以下将起作用:
^(((a*b){2})*)a*$
这是最好的解决方案,因为我遵循从 DFA 到正则表达式的转换算法(用笔完成):
(a*|ba*b)*
你可以测试一下here and you can learn about this algorithm watching this video。