You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求语言L = {w ∈ {a, b}*, Na(w) mod 2 = 1}对应的正则表达式

求解含奇数个a的字符串的正则表达式

嘿,这个问题我太熟悉了!咱们一步步拆解,轻松搞定这个正则表达式的构造~

先明确问题:我们要找字母表{a,b}上所有包含奇数个a的字符串,也就是字符串中a的个数模2等于1(即N_a(w) mod 2 = 1)。

核心思路

要构造这类字符串的正则表达式,关键是抓住「奇数个a」这个核心:

  • 字符串里可以有任意数量的b(b的数量不影响a的奇偶性)
  • a的总数必须是奇数,也就是1个a + 任意偶数个a(偶数个a可以是0个,或者成对出现的a)

最终正则表达式(两种等价写法)

写法一:最直观的结构

b*a(b*ab*a)*b*

逐段解释:

  • b*:开头可以有任意数量的b(包括0个b,也就是直接以a开头)
  • a:第一个a,保证至少有1个a(奠定奇数的基础)
  • (b*ab*a)*:可以重复0次或多次的「任意b + a + 任意b + a」,每次重复会增加2个a(保持总数为奇数:1+2n,n≥0)
  • b*:结尾可以有任意数量的b(包括0个b)

写法二:更简洁的等价形式

(b|ab*a)*ab*

解释:

  • (b|ab*a)*:任意次数的「单个b」或「两个a(中间夹任意b)」,这部分里a的总数是偶数(0个或成对的a)
  • ab*:最后加上1个a和任意数量的b,总a数就变成了「偶数+1=奇数」,完美符合要求

验证示例

咱们拿几个例子测试一下:

  • 符合条件的字符串:a、ba、abb、ababa(a的个数分别是1、1、1、3,都是奇数),都能被上面的正则匹配
  • 不符合条件的字符串:b、aa、baba(a的个数是0、2、2,都是偶数),都不会被匹配

这样构造的正则表达式完全覆盖了所有满足条件的字符串,而且逻辑清晰易懂~

内容的提问来源于stack exchange,提问作者Mohammadreza Salehi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 17:42:46