Maison > développement back-end > tutoriel php > 求一个正则表达式

求一个正则表达式

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2016-06-06 20:52:14
original
1124 Les gens l'ont consulté

将下面的文字分割成5段

1、其他文字2、3.879(其他文字中包括小数)3.123加4、加其他(其他文字中包括数字和顿号)4、(其他文字为空)5.其他文字

1

2

3

4

5

6

(数字开头后面跟着顿号和点符号)

1、其他文字

2、3.879(其他文字中包括小数)

3.123加4、加其他(其他文字中包括数字和顿号)

4、(其他文字为空)

5.其他文字

Copier après la connexion
Copier après la connexion

如果不用正则,PHP下有其他解决办法吗?

回复内容:

将下面的文字分割成5段

1、其他文字2、3.879(其他文字中包括小数)3.123加4、加其他(其他文字中包括数字和顿号)4、(其他文字为空)5.其他文字

1

2

3

4

5

6

(数字开头后面跟着顿号和点符号)

1、其他文字

2、3.879(其他文字中包括小数)

3.123加4、加其他(其他文字中包括数字和顿号)

4、(其他文字为空)

5.其他文字

Copier après la connexion
Copier après la connexion

如果不用正则,PHP下有其他解决办法吗?

是指这个特例还是指普遍情况?
如果是普遍情况的话,不可能在不解读文字语义的情况下靠纯正则实现。
正则需要足够的约定条件来明确,比如说,是否每个行号后面的标点符号都按你上面的例子一样,1、2、4后面就是顿号,3、5后面就是点号?

暂时先按照你这个特例来弄一个来玩玩。(其他文字为空)这部分我先当作删掉处理了……

1

2

3

4

5

6

7

8

9

10

11

12

13

$t="1、其他文字2、3.879(其他文字中包括小数3.154)3.123加4、加其他(其他文字中包括数字和顿号)4、5.其他文字";

$re='~

    1、[^\d]+

    |2、[^、]+(?=3\.)

    |3\..+(?=4、)

    |4、.*(?=5.)

    |5\..*

    ~x';

if (preg_match_all($re, $t, $tokens, PREG_PATTERN_ORDER)) {

    foreach ($tokens[0] as $w) {

        echo "<br>".$w."<br>";

    }

}

Copier après la connexion

说实话我觉得用简单正则(数字、点号、顿号、其他四种情况)把整段话拆散,依次读入并逐步按逻辑规则归档的方式来做(类似于readline的形式逐行读取)最明确,适用面也是最广的,因为这样至少有完善的缓存回退机制(例如读到2、时即可输出1、,后再次读到下一个顿号时可以回退到上一个3.输出,读到最后一个.后回退到上一个4、输出)。正则的非捕捉匹配在复杂情况下实在不是太给力啊……

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal