Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅使用正则表达式匹配最长单词_Php_Regex_Preg Match - Fatal编程技术网

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]
我只需要得到一个匹配2个constriants的单词,所有单词都应该只包含一组字符,所选单词应该是最长的,我尝试使用php正则表达式解决这个问题,例如:

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