正则表达式,检测文本模式

时间:2013-02-15 09:53:14

标签: php regex

我通过短信与我的用户进行互动,如果他们向我发送带有此模式的短信,我需要执行操作:

模式:

*TEXT*TEXT*TEXT#

TEXT中允许所有字符,所以我制作了这个正则表达式:

if (preg_match('/^\*([^*]*)\*([^*]*)\*([^#]*)\#$/', $text)){
    // perform the action...
}

上面的正则表达式实际上很好,但它不允许下一个lines after ,例如:

'*hello there*how you doing!?* and blah#'通过正则表达式,但是:

'*hello there*how you doing!?* and blah#

'

未通过上述正则表达式(请注意后的下一行)

所以我决定:

$text = str_replace("\n\r", '', $text);

但上述例子仍未通过: - (

我应该如何在正则表达式中允许下一行?或者摆脱它们?

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

在哈希之后允许可选空格和/或换行符:

if (preg_match('/^\*([^*]*)\*([^*]*)\*([^#]*)\#\s*$/', $text)){

我已将\s*添加为主题结尾之前的表达式。

您也可以事先使用修剪:

if (preg_match('/^\*([^*]*)\*([^*]*)\*([^#]*)\#$/', trim($test))){

<强>更新

作为一个附加要求,明星之间的文字不能为空:

if (preg_match('/^\*([^*]+)\*([^*]+)\*([^#]+)\#$/', trim($test))){

答案 1 :(得分:1)

糟糕的错误,就像@Jack说的那样我们必须添加\ s *而忘记“m”。

我将*更改为+,以便在**之间没有任何内容时返回false:

$text = "*fddsfdsf*dfdfd*5f8ssfdssf8#

";
if (preg_match('/^\*([^*]+)\*([^*]+)\*([^#]+)\#\s*$/', $text)){
    echo "yes";
}else{
  echo "no";
}