-1

サンプル文字列があります:

revision
revision-2
revision-3
revision-n...
autosave

およびphpコード

if(preg_match('/revision/', $str)) {
   echo "Edit 1";
}elseif(preg_match('/revision-(.+?)/', $str)) {
   echo "Edit $1";
}else {
   echo "Auto save";
}

しかし、結果が null です。どうすれば修正できますか?

4

5 に答える 5

1

あなたがやろうとしていることはこれだと思います:

if(preg_match('/^revision-(?[0-9]+)$/', $str, $matches)) {
   echo "Edit ". $matches[0];
} elseif(preg_match('/revision/', $str)) {
   echo "Edit 1";
} else {
   echo "Auto save";
}

説明:

  • ̛'^' は「で始まる」を意味します
  • (? ) は、正規表現に含まれる一致を保存するように指示します。
  • [0-9] は 0 から 9 までのすべての文字を意味します
  • 「+」は 1 回以上を意味します
  • 「$」は「で終わる」を意味します

すべてをまとめると、正規表現の意味が得られます。文字列に「revision」、ダッシュ、および数字のみが含まれている場合は、数字を保存して編集番号として出力します。それ以外の場合は、「自動保存」を出力します。

于 2013-11-13T09:41:00.420 に答える
1

パターンをどこにもキャプチャしていません。あなたはそれをする必要があります:

$str = 'revision-14';
if(preg_match('/revision-(.*)/', $str, $matches)) 
{
   echo "Edit ".$matches[1];
}
elseif(preg_match('/revision/', $str)) 
{
   echo "Edit 1";
}
else 
{
   echo "Auto save";
}

また、これ/revision/は制限が少ないため、より制限的な条件を最初に配置する必要があることに注意してください

于 2013-11-13T09:38:39.720 に答える
0

パターン文字列に問題がある可能性があります

以下のパターンで問題が解決することを願っています。

preg_match('\'リビジョン 2\'', 'リビジョン リビジョン 2 リビジョン 3 リビジョン n... 自動保存', $matches);

正規表現の一致を実行するための便利なオンライン リンクも 1 つあります。これも役に立ちます:

http://www.functions-online.com/preg_match.html

ハッピーコーディング:)

于 2013-11-13T10:02:14.777 に答える
0

別:

爆発を使用して値を見つけることができます。あなたの出力が同じままであれば、それはそうです。

$match = end(explode('-', $str));

これにより、'-' の後の値が $match に割り当てられます。

于 2013-11-13T09:46:33.780 に答える
0
  1. 最初のものは、「自動保存」を除くすべてif(preg_match('/revision/', $str))のケースに一致します。「リビジョン」のみに一致させたい場合があります。/^revision$/
  2. echo "Edit $1"一致を出力することを期待していると思います(.+?)。それはそれがどのように機能するかではありません。の 3 番目の引数を使用して一致をキャプチャする必要がありますpreg_match

    if (preg_match('/revision-(.+?)/', $str, $match)) {
        echo "Edit $match[1]";
    }
    
于 2013-11-13T09:39:29.417 に答える