2010-11-26 2 views
0

Я застрял.Соответствие строки с использованием 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); 

Я уверен, что это Probs что-то простое, но я не могу видеть это, я считаю, регулярное выражение является правильным: S

Спасибо,

Kyle

ответ

1

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

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

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

+1 Спасибо. Спасибо всем остальным: D –

+0

Обратите внимание, что использование жадного соответствия ('. *?') Менее эффективно, если указать, что вы не хотите сопоставлять ('[^ #] *'). –

+0

@ Даниэль: Коррекция - '. *' Жадный. '. *?' ленив. – stillstanding

0

PCRE regular expressions в PHP должны быть delimited. Вы можете попробовать:

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

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

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

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

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

+0

@Daniel V: Это не похоже, не соответствует ничего. Ty хотя: D –

+0

@Kyle Я не уверен, почему это не соответствует, это довольно простой шаблон и отлично работает для меня ... что такое вывод, если вы 'var_dump ($ msg)'? –

+0

@ Daniel V: Здравствуйте, # frstname #, ваше назначение с # appt # в # time # на # date #. –

0

попробовать

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

Это не сработало, я вижу свою ограниченную версию моего кода –

+0

ok, '# firstname #' - это только часть значения текстовой области? – slobodan

+0

Пример: Привет # frstname #, ваша встреча связана с # appt # at # time # on # date # –

0

попробовать

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

и вы также можете взглянуть здесь:

http://php.net/preg_match

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

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

+0

OP ищет не определенную строку (т. е. текст, расположенный между двумя символами #). это эффективно с использованием методов с фиксированной строкой l ike 'strpos' или' strstr'. –

+0

проблема была описана как «Я пытаюсь увидеть, содержит ли textarea #.» – mishu

+0

за то, что вы могли бы использовать if (preg_match ('/^(.*)#(.*)#(.*)$/', $ msg)) – mishu

Смежные вопросы