正则表达式的帮助包括和排除

我想要一些正则表达式的帮助。

我试图创建一个表达式,它将包含某些字符串并排除某些字符串。

例如:

我想包含任何包含流动性的http://www.something.com/mobility/

不过,我想排除任何包含商店的URL http://www.something.com/store/mobility/

仅供参考我有很多关键字,我正在使用包括。 目前我包括像这样/mobility|enterprise|products/i但我没有发现它能够排除包含其他关键字的链接。

提前感谢您提供的任何帮助和见解。

_t


可以在一个正则表达式中完成所有这些,但是你并不需要。 如果您运行两个单独的测试,我认为您会有更好的时间:一个用于包含规则,另一个用于排除规则。 不知道您使用的是什么语言,因此我将使用JavaScript作为示例:

function validate(str) {
    var required = /b(mobility|enterprise|products)b/i;
    var blocked = /b(store|foo|bar)b/i;

    return required.test(str) && !blocked.test(str);
}

如果你真的想用一种模式来做,试试这样的事情:

/(?=.*b(mobility|enterprise|products)b)(?!.*b(store|foo|bar)b)(.+)/i

最后i意味着不区分大小写,所以如果您不使用JavaScript,请使用您的语言。

所有的说法,基于你对问题的描述,我认为你真正想要的是字符串操作。 这里是一个例子,再次使用JS:

function validate(str) {
    var required = ['mobility','enterprise','products'];
    var blocked = ['store','foo','bar'];
    var lowercaseStr = str.toLowerCase(); //or just use str if you want case sensitivity

    for (var i = 0; i < required.length; i++) {
        if (lowercaseStr.indexOf(required[i]) === -1) {
            return false;
        }
    }

    for (var j = 0; j < blocked.length; j++) {
        if (lowercaseStr.indexOf(blocked[j]) !== -1) {
            return false;
        }
    }
}

要匹配必须包含单词的字符串,您可以使用积极的lookahead作为:

^(?=.*(?:inc1|inc2|...))

为了不匹配从停用词列表中包含单词的字符串,可以使用负向预测:

^(?!.*(?:ex1|ex2|...))

您可以在单个正则表达式中将上述两个要求组合为:

^(?=.*(?:inc1|inc2|...))(?!.*(?:ex1|ex2|...))REGEX_TO_MATCH_URL$

Rubular链接


让两个正则表达式分别为好,一个为坏,并检查两者? (首先是坏的,然后是好的)。 你可以用一个正则表达式来完成,但是KISS总是一个很好的规则(http://en.wikipedia.org/wiki/KISS_principle)

我会补充一点,你需要考虑“屁股”原则...... .*assambassadorcassette相匹配,所以你可能希望在每个单词前后都有一个分隔符( [./] )。 猥亵过滤器:不好的想法,或令人难以置信的交际不良想法?

链接地址: http://www.djcxy.com/p/76697.html

上一篇: Help with regex include and exclude

下一篇: A regular expression to exclude a word/string