2

我正在通过 SMS 与我的用户交互,如果他们向我发送具有此模式的 SMS,我需要执行一个操作:

图案:

*TEXT*TEXT*TEXT#

TEXT所有字符都是允许的,所以我做了这个正则表达式:

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

上面的正则表达式实际上很好用,但它不允许 next lines after #,例如:

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

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

'

上面的正则表达式没有通过(注意#之后的下一行)

所以我决定:

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

但是上面的例子仍然没有通过:-(

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

谢谢你的帮助

4

2 回答 2

2

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

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

我在\s*主题结尾之前添加了表达式。

您也可以预先使用修剪:

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

更新

作为附加要求,星星之间的文本不能为空:

if (preg_match('/^\*([^*]+)\*([^*]+)\*([^#]+)\#$/', trim($test))){
于 2013-02-15T10:11:12.297 回答
1

哎呀错误,就像@Jack 说我们必须添加 \s* 并忘记“m”。

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

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

";
if (preg_match('/^\*([^*]+)\*([^*]+)\*([^#]+)\#\s*$/', $text)){
    echo "yes";
}else{
  echo "no";
}
于 2013-02-15T10:11:14.547 回答