正则表达式的两个例题

2024/8/8
  • 例1
以下代码执行后,result 的值为()
var result = "75team2017".match(/\d+\w*/g);
\d 是一个匹配单个数字字符的元字符,等效于 [0-9]。
 + 是一个量词,表示前面的字符或表达式必须至少出现一次(1 次或更多次)。因此,\d+ 可以匹配一个或多个连续的数字。
\w*:
\w 是一个匹配字母、数字或下划线字符的元字符,等效于 [a-zA-Z0-9_]。
 + 是另一个量词,表示前面的字符或表达式可以出现任意次数(包括 0 次)。因此,\w* 可以匹配零个或多个字母、数字或下划线字符。

故最终结果为result = [“75team2017”];

  • 例2
从字符串 const str = 'qwbewrbbeqqbbbweebbbbqee';中能得到结果 ["b", "bb", "bbb", "bbbb"] 以下错误语句是?
A. str.match(/b+/g)
B. str.match(/b*/g)
C. str.match(/b{1,4}/g)
D. str.match(/b{1,5}/g)
选项 A: str.match(/b+/g)

/b+/g 解释为匹配一个或多个连续的 “b”。

  • 表示前面的字符 “b” 可以出现一次或多次。
    g 标志表示全局搜索,匹配所有可能的子串。
    预期结果:

这个正则表达式会找到并返回所有连续的 “b” 子串:[“b”, “bb”, “bbb”, “bbbb”]

选项 B: str.match(/b*/g)

/b*/g 解释为匹配零个或多个连续的 “b”。

  • 表示前面的字符 “b” 可以出现零次或多次。
    g 标志表示全局搜索。
    它会匹配到空字符串(零次 “b”),因为 * 允许零次匹配。
    返回的结果将包括许多空字符串和预期的 “b” 子串:[“”, “”, “b”, “”, “”, “bb”, “”, “”, “”, “bbb”, “”, “”, “”, “bbbb”, “”, “”, “”]
选项 C: str.match(/b{1,4}/g)
  • /b{1,4}/g 解释为匹配 1 到 4 个连续的 “b”。 {1,4} 表示 “b” 最少出现 1 次,最多出现 4 次。 g标志表示全局搜索。
    这个正则表达式会找到所有符合条件的 “b” 子串,但会将 “bbbb” 子串视为一个整体。
    返回的结果将是:[“b”, “bb”, “bbb”, “bbbb”]
选项 D: str.match(/b{1,5}/g)
  • /b{1,5}/g 解释为匹配 1 到 5 个连续的 “b”。 {1,5} 表示 “b” 最少出现 1 次,最多出现 5 次。这个正则表达式与选项 C 类似,但它允许匹配多达 5 个 “b”。因为字符串中最长的 “b” 子串只有 4 个 “b”,所以结果与选项 C 相同:[“b”, “bb”, “bbb”, “bbbb”]
### 编译原理中正则表达式的示例题目及其解析 #### 题目一:设计一个正则表达式,接受仅由字符 `a` 和 `b` 组成的字符串,并且该字符串至少包含两个连续的 `a`。 解答如下: 可以通过定义正则表达式 `(ab*|b)*aa(b|ba*)*` 来解决这个问题。这里解释一下各个部分的作用: - `(ab*|b)` 表达的是任意数量的 `b` 后面跟着一个 `a` 或者单独的一个 `b`[^1]。 - `aa` 是核心条件,表示必须存在至少两个连续的 `a`[^2]。 - `(b|ba*)*` 则允许后续有任意多个 `b` 或者以 `b` 开头并跟随零个或多个 `a` 的组合[^3]。 最终的结果是一个能够识别满足上述特性的字符串的正则表达式。 --- #### 题目二:编写一个正则表达式,用于匹配所有长度为偶数的二进制字符串。 解决方案可以是这样的正则表达式:`(00|11|01|10)*` 具体说明如下: - 这里的基本单元是由两位组成的二进制对 (即 `00`, `11`, `01`, `10`),它们各自代表了一个有效的、具有固定长度的片段[^4]。 - 使用星号 (`*`) 将这些基本单元重复多次,从而形成任何可能的偶数长度的合法字符串序列[^5]。 因此,只要输入符合这种模式,则必然属于我们所期望的一类字符串——那些拥有偶数位数的纯二进制形式的数据项。 ```python import re pattern = r"(00|11|01|10)*" test_strings = ["0", "1", "00", "11", "01", "10", "000", "111"] for s in test_strings: match_result = bool(re.fullmatch(pattern, s)) print(f"'{s}' matches? {match_result}") ``` 以上脚本展示了如何运用 Python 中的 `re` 模块去检测给定测试集中哪些成员能成功配对此特定规则下的正则表达式[^6]。 --- #### 题目三:构建一个正则表达式,它应该只接收形如 `{n}m{n}` 形式的字符串,其中 n ≥ 1 而 m 可以为任意大于等于零次出现次数的字母表中的某个单一字符 c (c ∈ Σ)。 对于此类问题,我们可以采用下面所示的方法来创建相应的正则表达式结构: 假设我们的字母表Σ={a,b},那么对应的正则表达式将是:`(a+b)(a*b*a+a*b*b)*(a+b)`. 进一步分解来看, - 外层括号内的第一个(a+b),意味着开头处必然是单个'a'或者'b'. - 接下来的中间部分(a*b*a+a*b*b)* ,涵盖了各种情况下的'm',它可以为空也可以是非空的各种情形. - 最后的外侧另一个(a+b),再次强调结尾也需对应相同类型的起始符号. 这便构成了完整的针对指定格式字符串的有效判定机制[^7]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值