gpt4 book ai didi

php - 匹配包含 "XYZ"且不以冒号开头的单词

转载 作者:行者123 更新时间:2023-12-04 10:41:26 28 4
gpt4 key购买 nike

我正在寻找匹配包含 XYZ 的任何单词的正则表达式模式并且不以冒号开头 : .

例如,我想从 This isXYZ a :exampleXYZa 匹配只有isXYZ .

我的第一个想法是使用这个正则表达式模式:

/(?<!\:[^\s\r\t\n])XYZ/

基本上,一个否定的回顾以确保事先没有没有空格的冒号。但是,这不起作用,因为 lookbehind assertion must be fixed length .

编辑:我也想要 utf8 支持。

最佳答案

你可以有一个像下面这样的正则表达式:

/\b((?<!:)\w*XYZ\w*)\b/ui
  • \b before 和 after 只是匹配一个单词边界。
  • ((?<!:)\w*XYZ\w*) ,我们检查是否有 XYZ 的任何单词在它之前有零个或多个字符,在它之后有零个或多个字符。借助负面回顾 (?<!:) ,我们确保它前面没有 : .
  • 正如 所提到的@unclexo 在评论中,您可以添加 u修饰符以支持 UTF-8 序列匹配。 See here for more info .
  • 您还可以添加 i不区分大小写匹配的标志。

  • 代码段:
    <?php

    $tests = [
    'This isXYZ a :exampleXYZa',
    'isXYZ a :exampleXYZa abcXYZ',
    'isXYZ a :exampleXYZXYZa abcXYZ',
    'XYZ',
    'XYZjdhf',
    'This isXYZ a example:XYZa',
    'äöüéèXYZ :äöüéèXYZäöüéè'
    ];

    foreach($tests as $test){
    if(preg_match_all('/\b((?<!:)\w*XYZ\w*)\b/ui',$test,$matches)){
    print_r($matches[0]);
    }
    }

    演示: https://3v4l.org/Y8SMj

    关于php - 匹配包含 "XYZ"且不以冒号开头的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59906696/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com