我通过短信与我的用户进行互动,如果他们向我发送带有此模式的短信,我需要执行操作:
模式:
*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);
但上述例子仍未通过: - (
我应该如何在正则表达式中允许下一行?或者摆脱它们?
感谢您的帮助
答案 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";
}