は(正確に)これ、preg_match_all()で検索ポインタを移動/リセットする方法はありますか?
preg_match_all("/(^|-)[a-z]+(-|$)/i", "foo-bar-moo", $matches);
を、次の例を見てください、次のマッチを返す
foo-
-moo
しかし、私は以下を生成する必要がある、出力に一致する
foo-
-bar-
-moo
があります実際にこれを行う方法?たとえば、一致した後に検索ポインタを1文字戻してみましょう。
唯一のアイデアは、while()
のループにこれを入れ、すべての一致が見つかるまで各ループの一致を削除することです。
ありがとうございました。
編集:問題をより明確にするために問題を簡略化しようとしましたが、そうすることで実際の問題点を誤って伝えているようです。謝罪。
基本的には、直前の文字または直後の文字が特定の文字だったが、同時にこれらの先頭と末尾の文字を一致させずに文字列内の単語に一致させる方法が必要でした。
私はあなたがこれを行うことができなかった印象を受けていたので、代わりに先行/後ろの文字をキャプチャして自分で削除することに決めました。これは上記の問題に私を導いた。
Tim Pietzckerが指摘したように、私が実際に必要としたのはlookaroundsでした。
は、したがって、上記の私の例のために、解決策は以下のように、ある
preg_match_all('/(?<=^|-)[a-z]+(?=-|$)/', "foo-bar-moo", $result);
そして、それは答え、助けをもう一度、
foo
bar
moo
感謝を出力します。
preg_match_all("/(^|-)([a-z])+(-|$)/i", "foo-bar-moo", $matches);
についてあなたは[FOO、バー、MOO]を得るでしょう何
ハイフンをオプションにすることはできますか(これは構文だと思いますか)。 (^ | - )?[a-z] +( - | $)? –
いいえ、一致する場合は '-'を取り上げる必要があります。 –