Генератор регулярных выражений PHP

Теперь у меня есть рабочая строка регулярного выражения для следующих необходимых критериев:

однострочное регулярное выражение, содержащее несколько ключевых слов, и keyterms и будет соответствовать хотя бы одному из них.

Например:

Ключевые термины:

  • apple
  • banana
  • strawberry
  • pear cake

Теперь, если любой из этих ключевых терминов найден, он возвращает true. Однако, чтобы добавить здесь немного больше трудностей, термин pear cake должен быть разделен на два ключевых слова, которые должны быть оба в строке, но не обязательно должны быть вместе.

Примеры строк, которые должны возвращать true:

  • A great cake is made from pear
  • i like apples
  • i like apples and bananas
  • i like cakes made from pear and apples
  • I like cakes made from pears

Рабочее регулярное выражение:

 /\bapple|\bbanana|\bstrawberry|\bpear.*?\bcake|\bcake.*?\bpear/ 

Теперь мне нужна функция php, которая будет создавать это регулярное выражение «на лету» из массива keyterms. Наклейка заключается в том, что keyterm может содержать любое количество ключевых слов внутри этого ключа. Нужно только найти ключ, но может присутствовать несколько. Как и прежде, слова в ключевом ключе должны появляться в строке в любом порядке.

Я написал для вас функцию здесь:

 <?php function permutations($array) { $list = array(); for ($i=0; $i<=10000; $i++) { shuffle($array); $tmp = implode(',',$array); if (isset($list[$tmp])) { $list[$tmp]++; } else { $list[$tmp] = 1; } } ksort($list); $list = array_keys($list); return $list; } function CreateRegex($array) { $toReturn = '/'; foreach($array AS $value) { //Contains spaces if(strpos($value, " ") != false) { $pieces = explode(" ", $value); $combos = permutations($pieces); foreach($combos AS $currentCombo) { $currentPieces = explode(',', $currentCombo); foreach($currentPieces AS $finallyGotIt) { $toReturn .= '\b' . $finallyGotIt . '.*?'; } $toReturn = substr($toReturn, 0, -3) . '|'; } } else { $toReturn .= '\b' . $value . '|'; } } $toReturn = substr($toReturn, 0, -1) . '/'; return $toReturn; } var_dump(CreateRegex(array('apple', 'banana', 'strawberry', 'pear cake'))); ?> 

Я получил функцию перестановок:

http://www.hashbangcode.com/blog/getting-all-permutations-array-php-74.html

Но я бы рекомендовал найти лучшую функцию и использовать другую, так как на первый взгляд это довольно уродливо, так как он увеличивает от $ i до 10000 независимо от того, что.

Кроме того, здесь приведен код для кода:

http://codepad.org/nUhFwKz1

Дайте мне знать, если с этим что-то не так!