Php 仅使用正则表达式匹配最长单词
我需要使用正则表达式匹配给定字符串的最长单词: 例如给定的字符串Php 仅使用正则表达式匹配最长单词,php,regex,preg-match,Php,Regex,Preg Match,我需要使用正则表达式匹配给定字符串的最长单词: 例如给定的字符串 S=“你好,晚上好,axbxbxx舞会等…” 字符集1=[abcdexy] 字符集2=[mnrpo] 我只需要得到一个匹配2个constriants的单词,所有单词都应该只包含一组字符,所选单词应该是最长的,我尝试使用php正则表达式解决这个问题,例如: preg_match("/\b[abcdexy]+/",$s, $match1); preg_match("/\b[mnrpo]+/",$s, $match2); if(st
- S=“你好,晚上好,axbxbxx舞会等…”
- 字符集1=[abcdexy]
- 字符集2=[mnrpo]
preg_match("/\b[abcdexy]+/",$s, $match1);
preg_match("/\b[mnrpo]+/",$s, $match2);
if(strlen($match1[0]) > strlen($match2[0]))
{
//output match1[0];
}
else
{
//output match2[0]
}
预期的输出应该是axbxbxx,因为它只包含集合1中的字符,并且是属于两个集合之一的单词之间的最长长度
我的问题是,我可以只使用regex而不需要strlen()测试吗 您可以编写一个正则表达式,使用管道匹配两个字符范围,然后按降序长度对匹配的值进行排序,并访问第一个元素的值 代码:() 输出:
decayed
上面的方法不是“tie-aware”,因此,如果有两个或多个值共享最大长度,则在输出中只能得到一个值。我认为你需要建立一些额外的逻辑来处理这些边缘案例,比如:
- 输出所有最大长度值或
- 设置第二个标准,以在长度上断开连接
我不想费心编写这些解决方案扩展,因为我不想做白痴。您提供的示例字符串的预期输出是什么?如果正则表达式实际上与字符串中的一个单词都不匹配,则不清楚您想做什么。您可以先使用正则表达式捕获所需字符串,然后检查每个组的长度。我编辑了问题以添加预期的输出。@FedericoPiazza这正是我所做的,但是我需要在纯正则表达式中实现,而不需要任何其他函数按空格分割字符串并检查最长单词的结果(数组),正则表达式不用于此任务
decayed