【发布时间】:2013-05-16 16:24:10
【问题描述】:
我有一堆这样的字符串:
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 值时才能正常工作。
这是 RegEx 设置:
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
附:字符串不区分大小写。
附言如果您曾经想过这些字符串到底是什么,它们是用户提交的问卷答案,我不能对它们做任何事情,比如重构,因为它们已经存储并且只需要继续。
为什么不使用爆炸?
如果您查看我的示例,您会发现我还需要在 # 之前捕获字符。如果您认为explode() 可行,请同时发布输出,谢谢!
更新
我们是否应该关注为什么/([A-Z])+#/ 仅在包含数字时才有效?谢谢。
【问题讨论】:
-
@senk 我还需要在 # 之前捕获字符。
-
您可以
explode()并从前一个数组项中复制最后一个字符。 -
@Voitcus 您可以尝试一下并将其作为答案发布吗?我仍然不知道你想如何用爆炸来捕捉那个角色。谢谢。
-
这很混乱,你能不能设置不同的分隔符,你能不能把字符串变成这样:"a#aax1aay222,b#bbx4bby555bbz6,c#mmm1,d#ara1,e#abc"
-
@nacholibre 当然,我可以通过一些技巧来做到这一点;找到#,在
-2位置放一个,,但老实说我不喜欢那样做......