使用正则表达式搜索两个子字符串(没有重叠/共享字符)

问题描述 投票:0回答:1

我正在使用正则表达式,我的任务是在充满随机单词的文本文件中找到同时具有子字符串“a”和“ha”的字符。不幸的是,我无法实现这一点,因为我编写的正则表达式不断匹配像

hat
这样的单词,它具有子字符串
ha
但不是单独的
a

这是我的正则表达式

\b(?=\w*a)\w*(?=\w*ha)\w*
,它匹配像
hat,hail
这样的单词,而它应该只匹配具有两个子字符串的单词,例如
haa, hata
。我该如何解决这个问题?

PS。子字符串的顺序并不重要,匹配只是一般练习,即不适合特定的编程语言。

php regex string substring match
1个回答
0
投票

你可以使用这个正则表达式:

\b(?:\w*ha\w*a|\w*a\w*ha)\w*

匹配:

  • \b
    :单词边界
  • (?:\w*ha\w*a|\w*a\w*ha)
    :要么
    • \w*
      :一定数量的单词字符
    • ha
      :字面意思
      ha
    • \w*
      :一定数量的单词字符
    • a
      :字面意思
      a
    • \w*
      :一定数量的单词字符
    • a
      :字面意思
      a
    • \w*
      :一定数量的单词字符
    • ha
      :字面意思
      ha
  • \w*
    :一定数量的单词字符

regex101 上的正则表达式演示

© www.soinside.com 2019 - 2024. All rights reserved.