现在,大多数人在论坛或网络上的任何其他地方发帖,似乎都喜欢为每个字母添加一个随机字的空格。我知道甚至有一个名字,但我太累了,我不记得了。通常你会在帖子标题上看到这个。
所以我有一个项目,我将使用正则表达式来查找所有这些单个字母组以尝试连接它们,并希望将它们重新组合成一个单词。
现在我的大部分项目已经完成,但我总是陷入正则表达式,因为我只是没有得到它。我对大多数编程和逻辑的基础知识都很好,但正则表达式我仍然没有得到它们。
因此,如果有人可以帮助我使用以下正则表达式模式,我将非常感激。
当有人提交一些文字时我想做以下事情。查找由空格分隔且位于单词之间的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
)
提前致谢。
答案 0 :(得分:2)
您可以使用以下正则表达式:
\b\p{L}(?:\h+\p{L}){2,}\b(?![\s\p{P}]*$)
请参阅regex demo
如果不在"句子的末尾,它将匹配至少3个用空格分隔的字母" (如果跟在字符串末尾有任何带标点符号的空格,则不匹配。)
IDEONE code demo:
$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,}
- 一个或多个水平空格(\h+
)的两个或多个序列,后跟一个字母\b
- 尾随字边界(?![\s\p{P}]*$)
- 仅在字符串结尾前没有跟随零或更多空格或标点符号时匹配。答案 1 :(得分:1)