正则表达式匹配只有一个大写字母的字符串

时间:2013-12-21 04:27:42

标签: php regex

我正在卷曲页面并获得输出

然而,正在发生的事情是删除了html编码,因此跳过了新的行,

所以它看起来像这样

This is Bob. He lives in an boatBut he only has one oar to row with.

为了检测新行,我认为只检查只有一个大写字母和空格的字符串更容易,到目前为止我有这个

(\s\w+\s\w+.\s\D+[a-z][A-Z])

然而,这似乎不起作用

因为它只与此匹配

 is Bob. He lives in an boatB

http://regex101.com/r/gH0lW1

如何匹配所有包含空格的字符串,并匹配所有字符串,最多为一个大写字母

2 个答案:

答案 0 :(得分:0)

更新:这将在不丢失任何字符的情况下拆分

<?php

$string = "This is Bob. He lives in an boatBut he only has one oar to row with.He also does stuff, it is cool.";
$array = preg_split('/(?<=[a-z.])(?=[A-Z])/', $string);
print_r($array);

?>

使用正面的lookbehind确保您在小写字母后捕获资本:

(?<=[a-z])[A-Z]

http://regex101.com/r/cB7bD8

如果需要,你可以使用php的preg_split来爆炸这个正则表达式的结果。

答案 1 :(得分:0)

(.*?(?:\w+(?=[A-Z]))|\1)

这个正则表达式有一个递归部分,它将匹配整个文本中的多个句子。因此,您可以查看Live demo并查看匹配的群组。

但是,

如果你想在一段时间(。)以及之后开始在每个句子上加一个换行符,那么我将上面的正则表达式修改为:

(.*?(?:(?:\w+|\. *)(?=[A-Z]))|\1)

现在您可以将结果与第一个正则表达式进行比较HERE