regex 用正则表达式匹配单词的前x个字符或单词的其余部分

o8x7eapl  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(179)

我有两个单词ab。我需要知道a的前x个字符(比如x = 3)是否匹配b的前x个字符,但是,如果a比x个字符长,那么a的后续字符必须匹配b中的相应字符。
让我用一个例子来解释。假设a是“Col”,b是“Colombia”,x = 3。如果a的前3个字符与b中的前3个字符匹配,则其TRUE。如果a是“科洛”或“Colom”,正则表达式也应该返回TRUE,因为这些情况匹配b。但是,如果a是“科尔”或“Colum”,则为FALSE。
我提出了两个解决方案,但似乎没有一个是完美的。

  1. (a, "^Col(o|ol|olo|olom|olomb|olombi|olombia)")
  2. ("Colombia", ^a)
    第一个解决方案满足所有条件,但写起来非常乏味,特别是如果你有很多单词要匹配。第二种情况更容易写,但它将匹配“C”或“Co”,我需要匹配最小的前3(或x)。
    有没有办法写一个正则表达式来满足我的需要?
    谢谢!
6jygbczu

6jygbczu1#

一般来说,这就是你所描述的:
(\b\w{3,}\b).*?\b\1
https://regex101.com/r/x1Z4mg/1
说明:

(                   # (1 start)
    \b                  # word boundary
    \w{3,}              # 3 or more word chars
    \b                  # word boundary
 )                   # (1 end)
 .*? 
 \b                  # word boundary
 \1                  # back reference to capture 1

这可以被扩展为不跨行、对第二个字进行前瞻等。
或者将 words 也更改为文字的混合。
那要看需要什么了

相关问题