2011-01-28 14 views
1

私はphpで渡された文字列が3つのうちの1つであることを確認する正規表現を書こうとしていますが、私は苦労しています(私は本当に正規表現で苦労しています)。 「|」正規表現のヘルプ

  1. は、私は私の受信パラメータはこれらの3つのうちの1つ、そして他には何が含まれていることを確認する必要がありますそれは単なるパイプです。

  2. ""それはちょうど空の文字列です。
  3. "| 1 | 534 | 3453 | 23 | 213 | 2 |"

はあなたの助けをありがとう一連の数値のための区切り文字としてパイプを使用して、長い文字列

+1

[正規表現をマスターする](http://oreilly.com/catalog)/9780596528126)(AKA Owl Book) –

+1

正規表現を読むのに役立つ2つのことがあります。このチュートリアル:http://www.regular-expressions.info/tutorial.htmlと、この正規表現を試すactionscriptサイト:http://gskinner.com/RegExr/ –

答えて

2
preg_match('/^(?:\|(?:\d+\|)*)?$/', $input); 
(これは継続的に私にとって問題であるが、私は正規表現だけに本を購入する必要があると思います)
+0

文字のための文字、私の答えとまったく同じです。遅すぎる。 – sdleihssirhc

+0

@sdleihssirhcその確率は何ですか? –

+0

両方とも宝くじを買うべきです。 – sdleihssirhc

1

3つの別々のチェックに分割することですこれを行う最も簡単な方法:

  1. 文字列はちょうど1本のパイプである(strcmp($str,"|") == 0
  2. 文字列が空であります(strlen($str) == 0)。
  3. 文字列が正規表現にマッチする/^[0-9\|]+$/

は、それが1つの正規表現の中にこれらのチェックのすべてを詰め込むしようとすることで必要以上に、それは難しくないでください。コードがより簡単に理解され、将来のコードのメンテナーがあなたに感謝します。

編集:はちょうど私が話している内容を表示するために、ここでいくつかのサンプルコードがあります:

if(preg_match('/^(?:\|(?:\d+\|)*)?$/', $str) { 
    ... 
} 

if(strcmp($str,"|") == 0 || 
    strlen($str) == 0  || 
    preg_match('^[0-9\|]+$', $str) { 
    ... 
} 

$strがある場合は、1つは...を実行一見、で、空の?

+0

私は同意します。それを3つの正規表現に分ければ、それは他の現行の答えよりもずっと保守的です。 – Jeff

+0

3つの正規表現は必要ありません。最初の2つのチェックは、 'strlen()'と 'strcmp()'の簡単な使い方です。私はこれらのチェックを表示するために私の答えを編集しました。 – CanSpice

+1

それは本当です、あなたは本当に正規表現が彼が示した3番目の条件をテストする必要があります。ちょうど古いジョークを証明するために行く:プログラマに問題がある。 「私は知っています」と彼は言います。「私は正規表現を使用します!今、彼には2つの問題があります。 – Jeff

0

(^(\ |)([0-9 \ |] {0})(\ |)$)|(^(\ |)$)|()

使用正規表現上記とIF str_len($ string)> 0の場合は空白をチェックしてください。