私は\ Gのアンカーが文字列の先頭に一致しないようにしようとしています。私はそれが最後の正規表現マッチの最後に一致するようにしたいだけです。RegEx(PCRE)の前回の試合の最後に続行
Pig, Cow, Goat
fruit: apple, orange, peach, pear
vegetable: Carrot, Lettuce, Cellery
このパターン:次のテキストを考える
、私はそれが個別に各単語をキャプチャする必要があります:「フルーツ」
(fruit:|\G)([\w]+|[\, ])
を私は後にのみマッチ言葉にそれをしたいです。私がちょうどこのパターンの最後に+を付けると、 "フルーツ"の後のすべての単語にマッチしますが、最後に+ストンプを繰り返すたびに "ナシ"が捕獲されます。
ここに問題があります。このパターンは、 "Pig、Cow、Goat"にもマッチしますが、\ Gは最後のマッチの終わりまたは文字列全体の始まりと一致するため、マッチします。どのように私はそれが全体の文字列の先頭に一致するのを防ぐことができますか?
私はPHPでPCREを使用しています。私はRubular.comを使用して、迅速なテストを手伝っています。
あなたは '\ G'後に区切り文字を'、 '含まれたことです。興味深い考え。私の問題は、デリミタとスペースはオプションであるということです。それらがオプションであるので、このパターンは、私が制御できない文書 'Pig'の最初から容易にマッチングを開始することができます。私も 'preg_replace'を使っていると説明していませんでした。私は' fruit: 'という単語を別々にマッチさせたいので、置き換え文字列を使ってその場所に戻すことができます。したがって私は '?:'を私のパターンで使用しませんでした。 – Andrew
果物の周りにカッコを入れてそれを捕まえるだけです。区切り文字とスペースはオプションで、どのように単語を区切りますか? – RobertB
他にもう1つ...少なくとも私がそれを上のパターンに置く方法は、最初の行でなければ行頭をキャプチャしていないようで、最初の行はカンマで始まります。あなたが言及していないいくつかのオプションを使用していますか? "ドットは改行にマッチする"? "^ $改行で一致する"? – RobertB