私はこのような文字列の束を持っています:
a#aax1aay222b#bbx4bby555bbz6c#mmm1d#ara1e#abc
そして、私がする必要があるのは、次のような位置に基づいてそれらを分割することですhashtag
:
Array
(
[0] => A
[1] => AAX1AAY222
[2] => B
[3] => BBX4BBY555BBZ6
[4] => C
[5] => MMM1
[6] => D
[7] => ARA1
[8] => E
[9] => ABC
)
したがって、ご覧のとおり、 のすぐ後ろの文字とhashtag
、次の文字 + ハッシュタグの直前のハッシュタグの後のすべてがキャプチャされます。
各部分の最後に値がある場合にのみRegEx
正常に機能する次のものがあります。numeric
正規表現のセットアップは次のとおりです。
preg_split('/([A-Z])+#/', $text, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
そして、それは次のようなものでうまく動作します:
C#mmm1D#ara1
しかし、これを変更すると(数字を削除して):
C#mmmD#ara
次に、それは結果になりますが、これは良くありません。
Array
(
[0] => C
[1] => D
)
私はこの質問とこれも見ましたが、似ていますが、どれもうまくいきませんでした。
それで、私の質問は、数字が続く場合にのみ機能するのはなぜですか? どうすれば解決できますか?
ここで、私が持っているサンプル文字列のいくつかを見ることができます:
a#123b#abcc#def456 // A:123, B:ABC, C:DEF456
a#abc1def2efg3b#abcdefc#8 // A:ABC1DEF2EFG3, B:ABCDEF, C:8
a#abcdef123b#5c#xyz789 // A:ABCDEF123, B:5, C:XYZ789
PS 文字列は大文字と小文字を区別しません。
PPSこれらの文字列が一体何なのか考えたことがあるなら、それらはユーザーがアンケートに提出した回答であり、リファクタリングのようなことはできません。それらはすでに保存されており、続行する必要があるためです。
爆発を使用しないのはなぜですか?
私の例を見ると、# の直前の文字もキャプチャする必要があることがわかります。可能だと思われる場合はexplode()
、出力も投稿してください。
アップデート
/([A-Z])+#/
数値が含まれている場合にのみ機能する理由に焦点を当てる必要がありますか? ありがとう。