gpt4 book ai didi

php preg_split 没有松散的文本,。 : and so forth

转载 作者:可可西里 更新时间:2023-11-01 00:42:59 25 4
gpt4 key购买 nike

我尝试使用 preg_split 拆分文本,但我没有得到它的正则表达式。

例子:

I search 1, regex to:  no. Or... yes!

应该得到:

Array
(
[0] => I
[1] => search
[2] => 1
[3] => ,
[4] => regex
[5] => to
[6] => :
[7] => no
[8] => .
[9] => Or
[10] => ...
[11] => yes
[12] => !
)

我尝试了以下代码:

preg_split("/([\s]+)/", "I search 1, regex to:  no. Or... yes!")

结束于:

Array
(
[0] => I
[1] => search
[2] => 1,
[3] => regex
[4] => to:
[5] => no.
[6] => Or...
[7] => yes!
)

编辑:好的,原来的问题已经解决了,但我在示例中忘记了一些东西:

新例子:

I search 1, regex (regular expression) to: That's it is! Und über den Wolken müssen wir...

应该得到:

array (
0 => 'I',
1 => 'search',
2 => '1',
3 => ',',
4 => 'regex',
5 => '(',
6 => 'regular',
7 => 'expression',
8 => ')',
9 => 'to',
10 => ':',
11 => 'That',
12 => '\'s',
13 => 'it',
14 => 'is',
15 => '!',
16 => 'Und',
17 => 'über',
18 => 'den',
19 => 'Wolken',
20 => 'müssen',
21 => 'wir',
22 => '...',
)

一件事是,开头 ( 在第一个解决方案中不匹配。另一件事是,也不是单词内的德语字符 ÄÖÜäöüß 不匹配。

希望可以更新问题(而不是打开一个新问题)。

我的 last try以下是不匹配的内容:

\s+|(?<!(A-Za-z1-0ÄÖÜäöüß)+)(?=(A-Za-z1-0ÄÖÜäöüß)+)

最佳答案

您可以使用这个基于前瞻的正则表达式:

$str = 'I search 1, regex to: no. Or... yes!';
$tok = preg_split('/\h+|(?<!\W)(?=\W)/', $str);

print_r($tok);

Array
(
[0] => I
[1] => search
[2] => 1
[3] => ,
[4] => regex
[5] => to
[6] => :
[7] => no
[8] => .
[9] => Or
[10] => ...
[11] => yes
[12] => !
)

/\h+|(?<!\W)(?=\W)是基于交替的正则表达式,它在 1+ 水平空间或在前一个字符不是非单词字符且下一个字符是非单词字符的位置处拆分。

交替的 RHS 是 (?<!\W)(?=\W)其中 (?<!\W)是负向后看,这意味着前一个字符不是非单词字符。那么(?=\W)是正先行,这意味着下一个字符是一个非单词字符。

关于php preg_split 没有松散的文本,。 : and so forth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29059112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com