使用php preg_match匹配字符串

时间:2010-11-26 16:53:49

标签: php preg-match

我被困住了。

我正在尝试查看textarea是否包含#。

这就是我正在尝试的但它不起作用。

示例:

#firstname# - should trigger "processTaggedMessage"

firstname - should trigger "processNormalMessage"

代码(PHP):

(preg_match("^#(.*?)#$", $msg))
  ? $this->processTaggedMessage($fk_uid, $fk_cid, $sender, $msg, $num, $q)
  : $this->processNormalMessage($fk_uid, $fk_cid, $sender, $msg, $num, $q);

我确信它是简单的,但我看不到它,我相信正则表达式是正确的:S

谢谢,

凯尔

4 个答案:

答案 0 :(得分:1)

如果您要尝试匹配由^分隔的多个子字符串,请删除$#

使用:

preg_match('/#.*?#/s', $msg)

答案 1 :(得分:0)

PHP中的

PCRE regular expressions需要delimited。你可以尝试:

preg_match('/^#([^#]*)#$/', $msg)

请注意,^$(根据您的原始模式)指定模式为字符串开头和结尾的anchored。这意味着除非整个字符串为#firstname#,否则您的模式将不匹配。如果要在字符串中搜索#的,请删除锚点:

preg_match('/#([^#]*)#/', $msg)

此外,如果您想确保哈希值之间存在某些文字,则应使用+代替*/#([^#]+)#/)。 *表示“零次或多次重复”,而+表示“一次或多次重复”。

顺便说一下,由于您在评论中提到您在目标字符串中搜索的内容多次出现,因此您可能希望使用preg_match_all代替preg_match你可以收集所有的比赛。

答案 2 :(得分:0)

preg_match('/^#(.*?)#$/', $msg)

答案 3 :(得分:0)

if (preg_match('/^(.*)#(.*)$/', $msg))

你也可以看一下:

http://php.net/preg_match

你会发现:

  

如果您只想检查另一个字符串中是否包含一个字符串,请不要使用preg_match()。使用strpos()或strstr()代替它们会更快。