使用正则表达式查找几个不同的匹配项

时间:2013-01-22 15:02:21

标签: php regex

我正在尝试检查

  1. '@username'
  2. '@username,'
  3. '@username '
  4. '@username.'
  5. '@username. '
  6. '@username:'
  7. '@username: '
  8. 我目前有这个:

    $post->message = preg_replace(
        '/@ *('.preg_quote($speak['username'], '/').') *:/i',
        '[url=\''.PAGE_URL.RELATIVE_WBB_DIR.'/index.php?page=User&userID='.$speak['toID'].'\']@'.$speak['username'].':[/url]',
        $post->message);
    

    有没有人有任何想法如何修改它以接受这些输入?

2 个答案:

答案 0 :(得分:0)

修改你的正则表达式以添加标点符号:

$post->message = preg_replace(
    '/@ *('.preg_quote($speak['username'], '/').')[:,.]? */i',
    '[url=\''.PAGE_URL.RELATIVE_WBB_DIR.'/index.php?page=User&userID='.$speak['toID'].'\']@'.$speak['username'].':[/url]',
    $post->message);

请注意添加的部分:

/@ *('.preg_quote($speak['username'], '/').')[:,.]? */i
                                             ^^^^^^

可选择匹配其中一个字符(冒号,逗号,句号)。

答案 1 :(得分:0)

这是一个应该达到你想要的正则表达式:

/^@[a-zA-Z]+[:\.\,]?[ ]?$/

/^@         // string starts with '@'
[a-zA-Z]+   // contains any letter at least once
[:\.\,]?    // may contain any : , . zero or one time
[ ]?$       // may contain a whitespace zero or one time at end of string