PHP正则表达式匹配一个词,但不匹配其他

SnakZ Maynard

我试图通过使用带有正则表达式的PHP的管道配件列表进行排序,我知道如何匹配多个单词,但我不知道如何不匹配单词。我需要它不匹配“螺栓”和“螺母”(带有或不带有s)。

排序列表简单

0-2“ x6”黑色乳头

0-1 / 2x4黑色乳头

20-3/4“ x 3/8”黑色衬套。

10-3/4“黑色插头螺纹

0-7/8 x 3 3/4黑色螺栓

0 -7/8黑色螺母

if(preg_match('/black|union/', $_POST["fitting_name$x"])){  
echo "show results";
}

似乎我需要先看消极的前瞻,我.(?!bolts)尝试了没有圆点但对我不起作用。我尝试了其他一些操作,但是到了要点,我只是在扔东西,希望能粘贴一些东西。

我真的对正则表达式不好,所以我可能已经找到了正确的方法,但是却不知道如何使它正常工作。也感谢您提供的任何帮助。

史蒂文

您可以使用否定的前瞻:

/^(?!.*\b(bolt|nut)s?\b).*(black|union)/
/                                         : Starting delimiter
 ^                                        : Matches the start of the string
  (?!                                     : Start of negative lookahead
     .*                                   : Matches any character 0 or more times
       \b                                 : Matches a word boundary before the target word
         (bolt|nut)                       : Literal match "bolt" OR "nut"
                   s?                     : Matches an optional "s"
                     \b                   : Matches a word boundary after the target word
                       )                  : End of negative lookahead
                        .*                : Match any charachter 0 or more times
                          (black|union)   : Literal match "black" OR "union"
                                       /  : Ending delimiter

使用\b单词任一侧意味着您不会意外地滤除包含该单词的单词bolt|nut,例如:bolted flange

$stringList = [
    '0 - 2"x6" black nipple',
    '0 - 1/2x4 black nipple',
    '20 - 3/4" x 3/8" black bushing.',
    '10 - 3/4" black plugs thread',
    '0 - 7/8 x 3 3/4 black bolts',
    '0 -7/8 black nuts'
];

foreach($stringList as $string){
    var_dump(
        preg_match('/^(?!.*\b(bolt|nut)s?\b).*(black|union)/', $string)
    );
}

/* Output...

int(1)
int(1)
int(1)
int(1)
int(0)
int(0)

i.e. matches for all but the last 2!
*/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果不是最后一个词,则正则表达式与该词不匹配

正则表达式获取 url php 的最后一个词

正则表达式匹配一个没有跟在其他两个词之后的词

正则表达式:在两个词之间捕获一个词

Powershell正则表达式匹配一个没有其他数字的数字

正则表达式找到一个词,但排除更大的词

PHP正则表达式-匹配所有内容,但不完全匹配一个或多个单词

在正则表达式捕获组中,排除一个词

java正则表达式搜索一个词

正则表达式在$$符号之间找到一个词

正则表达式消除一个词

同一个词的正则表达式扩展版本

用正则表达式忽略一个词

正则表达式消除一个词

有没有办法指定一个与其他都不匹配的正则表达式?

定义一个正则表达式,它两次匹配一个数字,一次匹配所有其他数字

如何搜索不以另一个词结尾的词?正则表达式

正则表达式匹配一个句子

一个简单的正则表达式匹配

正则表达式:匹配3个连续词

Python正则表达式-匹配某些第一个字符,但不匹配W

正则表达式包含模式匹配,不包含另一个但不紧随其后的匹配

正则表达式匹配一个模式,但不包括另一个模式

正则表达式匹配(1个或多个)php heredocs包含一个空行

正则表达式匹配两个单词,不匹配其他单词

如何用转义和封闭括号对一个词进行正则表达式?

在另一个正则表达式匹配文本之后匹配文本的正则表达式

有一个正则表达式匹配一个组或其他组字符,两边都相同

正则表达式:匹配仅后跟一个空格但不是 2 个或更多空格或 EOF 的模式