【问题标题】:PHP preg_match excludePHP preg_match 排除
【发布时间】:2015-04-24 03:35:54
【问题描述】:

好的,这个正则表达式将匹配字符串,如 2aa、a2、2aaaaaa、aaaa2、aaa2aaaa、2222a2222-2222-aaaa... 简而言之,在一个序列中混合字母数字字符:

preg_match("/(?:\d+[a-z]|[a-z]+\d)[a-z\d]*/i")

现在我想排除一些东西,但我被卡住了,这样的东西不起作用

preg_match("/(?!1920x1200|1920x1080)(?:\d+[a-z]|[a-z]+\d)[a-z\d]*/i")

例如字符串 aaaaa222aaa1920x1200bbbbb1234556789 仍然匹配,但它不应该因为它包含 1920x1200

任何帮助表示赞赏:)

我正在使用此处找到的正则表达式来匹配字母序列Regex: match only letters WITH numbers

正则表达式测试:https://regex101.com/r/vU9aU9/1

【问题讨论】:

    标签: php regex preg-match pcre


    【解决方案1】:

    您的否定前瞻应该在前面有 .*,以便在不允许的文本之前允许 0 个或更多字符。在你的正则表达式中也使用锚。

    正则表达式应该是:

    preg_match('/^.*?1920x1200.*$(*SKIP)(*F)|(?:\d+[a-z]|[a-z]+\d)[a-z\d]*/im')
    

    RegEx Demo

    【讨论】:

    • 但是 2222a2222-2222-aaaa 字符串也应该匹配,因为第一个序列 2222a2222 是字母数字的组合。字符
    • 请看更新的演示 regex101.com/r/wE0mF2/4 这几乎是我想要的,只有最后一个字符串不匹配,它应该是,如果我在末尾添加 $ 则最后 3 个字符串将赢' t 匹配,这个正则表达式让我感到困惑 :)
    • 我的原始代码完全符合我的要求,-_,。不重要,它可以是任何其他非字母字符...现在我只想不匹配整个字符串,如果它在某处找到 1920x1200,单独 a2 将匹配,a2-aa 也将匹配,aa-22 将不匹配, aa22-1920x1200 不匹配,因为 1920x1200,抱歉我的英语不完美:(
    • 我的第一个代码效果很好,看看,如果找到 1920x1200 regex101.com/r/wE0mF2/6,我只想不匹配该行上的任何内容
    • 我认为你在这里遗漏了一些重要的东西。如果没有锚,整个字符串块被认为是一个单独的字符串。为了避免将一行与1920x1200 匹配,您必须告诉前瞻禁止匹配直到行尾,因此必须使用锚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多