避免两个搜索词之间的标点符号或任何不需要的字符的正则表达式

Regular expression that avoids punctuation or any unwanted characters between two search words

本文关键字:标点符号 任何 不需要 正则表达式 字符 之间 搜索 两个      更新时间:2023-09-26

这是我作为一个例子使用的文本。

狗去了房子。狗儿们来到了房子里。狗去找家庭主妇。"

我想使用正则表达式来获取从"dog"开始并以"house"结束的字符串。我不想要第二行和第三行,因为它们都有标点符号。我真想买狗和房子。

我想到的正则表达式是:

/(D|d)og.[^'p{P}|s]{0,40}house.{0,1}('s|'.)/

然而,它似乎不起作用。下面是我得到的错误:

Error: Parse error on line 4:
... [
        "1,10,0,1,/(C|c)limb
---------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', ']', got 'undefined'
validated by jsonlint

我学的是经济学,不是计算机编程,所以请对我宽容一点。让我知道,如果我错过了什么或需要提供额外的信息。谢谢你。

如果您希望只允许单词字符和空白,避免标点符号,您可以:

/dogs?['w's]+houses?['s.]/i

:

dog         #  'dog'
 s?         #  's' (optional)
 ['w's]+    #  any character of: 
            #    word characters (a-z, A-Z, 0-9, _), 
            #    whitespace ('n, 'r, 't, 'f, and " ") (1 or more times)
house       #  'house'
 s?         #  's' (optional)
 ['s.]      #  any character of: whitespace ('n, 'r, 't, 'f, and " "), '.'

现场演示

如果不希望包含结尾标点或空格,请在匹配的模式周围放置一个捕获组作为匹配结果:

/(dogs?['w's]+houses?)['s.]/i

或者使用forward来断言其中一个在字符串的那个位置。

/dogs?['w's]+houses?(?=['s.])/i

注释:添加了i修饰符,用于不区分大小写的匹配