【问题标题】:Preg_Match exact Word and Output the Word from String TextPreg_Match 精确单词并从字符串文本中输出单词
【发布时间】:2020-03-24 10:36:19
【问题描述】:

如何输出匹配词不区分大小写? PHP代码:

if(preg_match("/(?i)(?<= |^)" . $Word . "(?= |$)/", $String)) {
 // If Exact Word is Match Case Insensitive
}

例如我的字符串是: 你好,视频很有趣。

我想从 String 中获取“Video”,但因为我的 PHP preg_match 不区分大小写,并且我正在寻找“video”,所以我需要从字符串中获取输出“Video”。

另一个字符串示例: 你好,视频很有趣 从字符串中获取输出“vIDeo”。

另一个字符串示例: 你好,视频很有趣。 此字符串不需要输出“vIDEOwas”,因为它不匹配确切的单词。

我需要这个脚本,这样我就可以在搜索字符串后查看在字符串上找到确切单词的方式。

【问题讨论】:

  • strtolower($String)?
  • 我需要从字符串示例“vIDeo”中得到完全匹配的 strtolower 正在使所有单词变小......对我没有帮助
  • 使用第三个参数指定一个你想捕捉实际匹配的变量。

标签: php regex preg-match


【解决方案1】:

您可以使用preg_match() 的第三个参数来获取匹配项;在您的情况下,最多会有一个匹配的模式:

$body = 'Hello there, the Video was funny';
$search = 'video';

if (preg_match('/\b' . preg_quote($search, '/') . '\b/i', $body, $matches)) {
  print_r($matches[0]); // Video
}

对代码的其他一些更改:

  1. 如果您不知道搜索词的来源,请始终使用 preg_quote()
  2. 我使用/i 修饰符而不是(?i)
  3. 我使用零宽度\b 断言代替后视和前瞻断言。

【讨论】:

    【解决方案2】:

    您可以将找到的匹配项替换为$Word,然后比较两个字符串

    $String = 'Hello there, the Video was funny';
    $Word = 'Video';
    $s2 = preg_replace("/(?i)(?<= |^)" . $Word . "(?= |$)/", $Word, $String);
    
    if ( $s2 === $String ) {
        echo "found";
    }else {
        echo "NOT found";
    }
    

    另一种解决方案

    $String = 'Hello there, the Video was funny';
    $Word = 'Video';
    $s = explode(' ',$String);
    foreach($s as $w) {
        if( $w === $Word) {
            echo $w;
            break;
        }
    }
    

    【讨论】:

    • 我发布的脚本已经给了我是否找到了这个词,我需要从字符串中获取这个词,这样我就可以看到这个词是如何在字符串中扭动的......你的命令正在做与我发布的命令相同的操作...
    • 添加了答案。请看
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多