在 php 中使用正则表达式进行排列

Posted

技术标签:

【中文标题】在 php 中使用正则表达式进行排列【英文标题】:permutation using regular expression in php 【发布时间】:2016-05-03 07:14:22 【问题描述】:

有没有办法只使用 php 中的正则表达式来获得字符串中所有单词的排列。

例如:

诸如“如何消除人类膝关节疼痛”之类的输入

我想输出为:

“如何”、“如何”、“疼痛膝盖”、“移除膝盖”、“膝盖疼痛”、“移除”、“人类疼痛膝盖”等

【问题讨论】:

那么你想要的是字符串单词的幂集对吗?你可以改编这个answer 我只想要正则表达式 哦,对,我跳过了问题的那部分对不起。正则表达式旨在匹配字符串的元素,而不是构建一个集合。您可以使用正则表达式来拆分字符串,但最终,您将需要更多代码来实现您的目标。 只用正则表达式是不行的 【参考方案1】:

使用正则表达式只会减慢进程。

我根据雅达发的powerSet()函数写了一个函数@https://***.com/a/27968556/2943403)

代码:(Demo)

function permStacker($array)
    $stack=[[]];  // declare intitial empty element
    foreach($array as $element)
        foreach($stack as $combination)
            foreach(array_diff($array,$combination) as $left)
                $merge=array_merge($combination,[$left]);
                $stack[implode(' ',$merge)]=$merge;  // keys hold desired strings, values hold subarray of combinations for iterated referencing
            
        
    
    unset($stack[0]); // remove initial empty element
    return array_keys($stack);  // return array of permutations as space delimited strings


$string='How to remove pain in human knee';
$permutations=permStacker(explode(' ',$string));
echo 'Total Permutations: ',sizeof($permutations),"\n";
var_export($permutations);

输出:

Total Permutations: 13699
array (
  0 => 'How',
  1 => 'to',
  2 => 'remove',
  3 => 'pain',
  4 => 'in',
  5 => 'human',
  6 => 'knee',
  7 => 'How to',
  8 => 'How remove',
  9 => 'How pain',
  10 => 'How in',
  11 => 'How human',
  12 => 'How knee',
  13 => 'to How',
  14 => 'to remove',
  15 => 'to pain',
  16 => 'to in',
  17 => 'to human',
  18 => 'to knee',
  19 => 'remove How',
  20 => 'remove to',
  21 => 'remove pain',
  22 => 'remove in',
  23 => 'remove human',
  24 => 'remove knee',
  25 => 'pain How',
  26 => 'pain to',
  27 => 'pain remove',
  28 => 'pain in',
  29 => 'pain human',
  30 => 'pain knee',
  31 => 'in How',
  32 => 'in to',
  33 => 'in remove',
  34 => 'in pain',
  35 => 'in human',
  36 => 'in knee',
  37 => 'human How',
  38 => 'human to',
  39 => 'human remove',
  40 => 'human pain',
  41 => 'human in',
  42 => 'human knee',
  43 => 'knee How',
  44 => 'knee to',
  45 => 'knee remove',
  46 => 'knee pain',
  47 => 'knee in',
  48 => 'knee human',
  49 => 'How to remove',
  50 => 'How to pain',
  51 => 'How to in',

这是bob at math.stackexchange 的帖子,它确认13699 是在输入字符串中给定7 单词时返回数组的预期大小。此外,bob 的故障应该作为对排列如何快速上升的警告——小心你的大字符串。

【讨论】:

@AnkitAgarwal 有必要通知您,我之前的方法不正确。如果您在我们的某个项目中使用它,请立即更换该功能,因为它给出了错误的结果。我的新方法现在证明是正确的。对不起我的错误。

以上是关于在 php 中使用正则表达式进行排列的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 中的正则表达式在字符串中搜索可以按任何顺序排列的子字符串

PHP正则表达式的使用技巧

php正则表达式

前端学PHP之正则表达式基础语法

前端学PHP之正则表达式基础语法

在 PHP 中使用正则表达式进行电子邮件验证