一尘不染

拆分包含字母和数字的字符串,这些字符串不由PHP中的任何特定定界符分隔

algorithm

目前,我正在开发一个Web应用程序以获取Twitter流,并尝试自己创建自然语言处理。

由于我的数据来自Twitter(受140个字符限制),因此缩短了许多单词,在这种情况下, 省略了空格

例如:

"Hi, my name is Bob. I m 19yo and 170cm tall"

应该标记为:

- hi
- my
- name
- bob
- i
- 19
- yo
- 170
- cm
- tall

请注意,19yo19yo没有空间 之间。我主要将其用于提取具有其单位的数字。

简而言之,我需要的是一种通过数字或字母块( 没有 定界符)来“爆炸”其中具有数字的每个令牌的方法。

'123abc' 将会 ['123', 'abc']

'abc123' 将会 ['abc', '123']

'abc123xyz' 将会 ['abc', '123', 'xyz']

等等。

用PHP实现它的最佳方法是什么?


我找到了接近它的东西,但是它是C#,尤其是用于日/月拆分。


阅读 290

收藏
2020-07-28

共1个答案

一尘不染

您可以使用preg_split

$string = "Hi, my name is Bob. I m 19yo and 170cm tall";
$parts = preg_split("/(,?\s+)|((?<=[a-z])(?=\d))|((?<=\d)(?=[a-z]))/i", $string);
var_dump ($parts);

当与数字字母边界匹配时,正则表达式匹配必须为零宽度。字符本身不能包含在比赛中。为此,零宽环顾四周非常有用。

http://codepad.org/i4Y6r6VS

2020-07-28