Может ли preg_replace выполнять несколько операций поиска и замены одним выстрелом?

Вот как это можно сделать в нескольких строках:

// $str represents string that needs cleaning: $str = " String with line\nbreak and too much spaces "; // Clean string with preg_replace(): $str = preg_replace('/[\x00-\x09\x0B-\x1F\x7F]|^ +| +$/', '', $str); $str = preg_replace('/\x0A| +/', ' ', $str); echo $str; // Output: "String with line break and too much spaces" 

Мой quoestion фокусируется на объединении двух строк preg_replace () в одно preg_replace (), которое выполняет точно такую ​​же работу.

Возможно ли это, и как это сделать?


Существует много различных применений для такого поведения, которое я использую после определения regexp как константы или переменной, и использовать в функции класса для очистки и проверки ввода пользователя.

Упрощенный пример такого класса:

 class cleaner{ protected $defined_methods = array( 'TRIM' => '/ +/', 'STRIP_CC' => '/[\x00-\x1F\x7F]/', 'TRIM_STRIP_CC' => array('/[\x00-\x1F\x7F]/', '/ +/') ); protected $defined_results = array( 'TRIM' => ' ', 'STRIP_CC' => '', 'TRIM_STRIP_CC' => array('', ' ') ); function clean(array $input, array $methods){ foreach ($input as $key => $data){ $input[$key] = preg_replace($defined_methods[$methods[$key]], $defined_results[$methods[$key]], $data); } return $input; } } 

Таким образом, метод валидации (regexp) может меняться в зависимости от входных данных, если это необходимо.

Solutions Collecting From Web of "Может ли preg_replace выполнять несколько операций поиска и замены одним выстрелом?"

 $str = preg_replace( $patterns = array('/[\x00-\x09\x0B-\x1F\x7F]|^ +| +$/', '/\x0A| +/'), $replace = array('', ' '), $str ); 

См. preg_replace , он поддерживает несколько замен друг за другом.

Конечно; это немного сложнее, хотя:

 $str = trim(preg_replace('/[\x00-\x09\x0B-\x1F\x7F\s]*\s[\x00-\x09\x0B-\x1F\x7F\s]*/', ' ', $str));