2010-10-19 2 views
2

Я знаю, что есть, если/тогда в подгонке регулярных выражений, но есть ли в замене?preg_replace условная замена с помощью другой строки

ie. Я хочу сделать в одном из регулярных выражений

"У меня есть Foo Бары под 5 $ для продажи", чтобы быть "Foo Bars ~ $ 5"

"У меня есть Foo бары для продажи", чтобы стать "Foo Барс" и НЕ «Foo Bars ~»

у меня есть выражение немного, как это на данный момент:

preg_replace("/(([A-Z][a-z]*\s){1,3})((under .)\d+)?/","$1~$4",$str); 

(с другими битами, чтобы удалить другой текст Aswell конечно!) но тха t включает ~ даже когда в нем нет «под».

Я мог бы, вероятно, использовать preg_replace_callback, но это кажется немного OTT

Спасибо.

+0

Почему бы не сравнить строки в PHP, то есть различные выражения preg_replace для них? Я не понимаю, почему вы ищете сложный способ решения простого решения. – theAlexPoon

+0

Да, в моем примере я мог это сделать, но то, что я пытаюсь сделать, включает в себя синтаксический анализ страницы текста, и мне бы хотелось сделать это в одном регулярном выражении, если это возможно – Vortigern

ответ

2

функция обрезки РНР будет делать:

// Before: "Foo Bars~$5" 
    $str = trim($str,'~'); 
// After: "Foo Bars~$5" 

// Before: "Foo Bars~" 
$str = trim($str,'~'); 
// After: "Foo Bars" 
Смежные вопросы