我有一串字符串是这样的:正则表达式包括hashtag分隔的字符串
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
后面的字符被加上加上紧随下一个char + hashtag之前的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
)
我看过this问题和this其中一个也是类似的,但都没有为我工作。
所以,我的问题是为什么它只有在后面跟着一个数字才有效?以及我如何解决它?
在这里你可以看到,我有一些他们的样本串:
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
附:字符串不区分大小写。
P.P.S.如果你想过这些字符串究竟是什么,它们是用户提交的调查问卷的答案,我不能对它们做任何重构,因为它们已经存储并且只需要继续。
为什么不使用爆炸?
如果你看看我的例子,你会发现我需要在#之前捕获角色。如果您认为可以使用explode()
,请发布输出,谢谢!
更新
要着重如果包含数字,为什么/([A-Z])+#/
仅适用?谢谢。
为什么不爆炸()? – senK
@senk我需要在#之前捕捉角色。 – Mahdi
你可以'爆炸()'并复制前一个数组项中的最后一个字符。 – Voitcus