2011-01-26 7 views
2

誰でもこの正規表現で何が問題なのか教えてください。PHP正規表現の問題

preg_match("/\+?)\)(=.+?,.+?)?\](.+?)\[\/quote\](?!((.*?)\[\/quote\]))/s", $text, $match, null, $start); 

それは(私はフォーラムでそれを見つけた)が機能しなければならないが、それはエラーがスローされます: 警告:するpreg_match()[function.pregマッチ]:コンパイルに失敗しました:で、比類のない括弧は3オフセット

私は、括弧が何か間違っていると思いますか? +エスケープと疑問符の後に式の中で3番目の文字として発生する事前に

おかげで、 フィッシャー

+1

この正規表現は間違いなく壊れています。意図した結果とregexと照合する文字列を指定すると、意味のある応答を提供しようとする可能性があります。 –

答えて

4

"/\+?)

\+?\)(=.+?,.+?)?\](.+?)\[\/quote\](?!((.*?)\[\/quote\])) 

またはこのように、それをエスケープ:バックスラッシュ

123 
"/\+?)\)(=.+?,.+?)?\](.+?)\[\/quote\](?!((.*?)\[\/quote\]))/s" 
    ^--- here 
"/\+?\)\)(=.+?,.+?)?\](.+?)\[\/quote\](?!((.*?)\[\/quote\]))/s" 
+0

私がしようとしているのは、次のものからsomデータを抽出することです:[quote = quote-userName(32)] quote text [/ quote] ...私は現在のデータを取得したい: "quote-userName (32) "と" quote text "が抽出されました! – fischer

2

それは最初のことを伝えるだが)、比類のないです。いずれかの行方不明(式の先頭またはこれにある)が\にエスケープされる必要があります。 )が比類のないこと -

\+?\)\)(=.+?,.+?)?\](.+?)\[\/quote\](?!((.*?)\[\/quote\])) 
1

は、最初の閉じ括弧を削除してください。あなたはそれの前のどこかにオープニングパンレンを置くか、それを取り除く必要があります。それが何をしようとしているのであれ、どちらが最善であろうと確信していません。

2

がありません