сопоставление строки с использованием php preg_match - PullRequest
0 голосов
/ 26 ноября 2010

Я застрял.

Я пытаюсь увидеть, содержит ли текстовая область #.

Это то, что я пытаюсь, но это не работает.

Пример:

#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 ]

1 голос
/ 26 ноября 2010

Избавьтесь от ^ и $, если вы пытаетесь сопоставить несколько подстрок, разделенных #.

Использование:

preg_match('/#.*?#/s', $msg)
0 голосов
/ 26 ноября 2010

1001 * попробовать *

preg_match('/^#(.*?)#$/', $msg)
0 голосов
/ 26 ноября 2010

1001 * попробовать *

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

и вы также можете посмотреть здесь:

http://php.net/preg_match

и вы найдете это:

Не используйте preg_match (), если вы хотите проверить, содержится ли одна строка в другой. Вместо этого используйте strpos () или strstr (), так как они будут быстрее.

0 голосов
/ 26 ноября 2010

Регулярные выражения PCRE в PHP должны быть с разделителями .Вы можете попробовать:

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

Обратите внимание, что ^ и $ (согласно исходному шаблону) указывают, что шаблон привязан к началу и концу строки.Это означает, что ваш шаблон не будет совпадать, если вся строка не будет #firstname#.Если вы хотите найти # 1013 * в строке , удалите якоря:

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

Также, если вы хотите убедиться, что между хешами есть какой-то текст, вам следуетиспользуйте + вместо * (/#([^#]+)#/).* означает «ноль или более повторений», в то время как + означает «один или несколько повторений».

Кстати, поскольку вы упомянули в комментариях, что вы ищете несколько раз,в пределах вашей целевой строки вы, вероятно, захотите использовать preg_match_all вместо preg_match, чтобы вы могли собрать все совпадения.

...