2012-05-03 10 views
2

正規表現に問題があります。
私がトークンで働いていると私はこのようなテキストを解析する必要があります。regexとpreg_replace_callback

Just some random text 
#IT=AB|First statement# #xxxx=xxx|First statement|Second statement# 
More text 

私は最初の文又は第二のいずれかを使用する必要があるため、私はpreg_replace_callbackを使用し、最初の式に依存することは事実であるかどうか;それは一種のIF...ELSE...ステートメントです。だから私は私のコールバック関数内でそれらを操作し始めることができます

#IT=AB|First statement# 
#xxxx=xxx|First statement|Second statement# 

:私は何を期待

は、このような2つの要素です。
私はこの正規表現/#.*#/を試しましたが、文字列全体が取得され、要素に解析されません。

どうすれば実現できますか?すみませんが、正規表現は私のものではありません:(

答えて

4

数量詞*は、デフォルトで貪欲である。だから、.*が同じくらいそれができるように一致し、その結果として、それは同様#と一致します。修正するには。。これは、あなたがそれの後?を追加することにより、*非貪欲を作ることができる今.*?は、それができるよう少し同じくらいに

/#.*?#/ 

をしようとか、次の2つの#間で唯一の非#文字を探すことができます。

/#[^#]*#/ 
+0

それは動作します!どうもありがとう。どうか、エラーがどこにあるのか教えてください。 – tampe125

+1

'。*'は可能な限り一致する[greedy](http://www.regular-expressions.info/repeat.html)です(途中で見つかる '# 'を含む)。 '。*?'は可能な限り少数の文字と一致し、 '[^#] *'はハッシュを除くすべての文字と一致します。 –