2

SMS を介してユーザーと対話しています。ユーザーがこのパターンで SMS を送信した場合、アクションを実行する必要があります。

パターン:

*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);

しかし、上記の例はまだ渡されていません:-(

ここで正規表現で次の行を許可するにはどうすればよいですか? またはそれらを取り除きますか?

ご協力いただきありがとうございます

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 に答える