如何查找字符串中出现的单个字母组的所有匹配项


How to find all occurrences of groups of single letters in a string

现在,大多数在论坛或网络上任何其他地方发帖的人似乎都喜欢为每个随机单词的每个字母添加一个空格。我知道它甚至有一个名字,但我太累了,我不记得了。通常您会在帖子标题上看到这一点。

所以我有一个项目,我将使用正则表达式来查找所有这些单个字母组,以尝试将它们连接起来,并希望将它们放回一个单词中。

现在我的大部分项目已经完成,但我总是被正则表达式困住,因为我只是不明白。我对编程的大部分基础知识和逻辑都没问题,但我仍然没有得到正则表达式。

因此,如果有人可以帮助我使用以下正则表达式模式,我将不胜感激。

当有人提交一些文本时,我想执行以下操作。查找由空格分隔且位于单词之间的任何一组 3 个或更多个单个字母

$string = "Lorem i p s u m dolor sit a m e t, consectetur adipiscing e l i.";
// I know thats as far as I got with the pattern
$pattern = "/'s([a-zA-Z{1}])'s'w+/";
preg_match_all($pattern, $string, $matches);

所以上面的代码应该输出:

Array 
(
   [0] => i p s u m
   [1] => a m e t
)

提前谢谢。

您可以使用

以下正则表达式:

'b'p{L}(?:'h+'p{L}){2,}'b(?!['s'p{P}]*$)

查看正则表达式演示

仅当不在"句子"的末尾时,它才会匹配至少 3 个用空格分隔的字母(如果字符串末尾跟着任何带有标点符号的空格,则不匹配(。

IDEONE 代码演示:

$re = '~'b'p{L}(?:'h+'p{L}){2,}'b(?!['s'p{P}]*$)~u'; 
$str = "Lorem i p s u m dolor sit a m e t, consectetur adipiscing e l i.";
preg_match_all($re, $str, $matches);
print_r($matches[0]);

正则表达式匹配:

  • 'b - 前导词边界
  • 'p{L} - 一个字母
  • (?:'h+'p{L}){2,} - 2 个或多个序列的一个或多个水平空格 ('h+ ( 后跟一个字母
  • 'b - 尾随字边界
  • (?!['s'p{P}]*$) - 仅当字符串末尾没有零个或多个空格或标点符号时才匹配。

您可以使用向前看和重复,

/(?:'s[a-zA-Z](?=['s,.])){3,}/

正则表达式演示