2015-06-25 7 views
2

Я уверен в том, как сделать следующее ...PHP: preg_match и preg_replace

мне нужно искать через string и соответствовать все экземпляры forward slash и certain letters. Это для модификаций слов, которые пользователи могут вводить, и я хочу, чтобы они могли изменять отдельные слова.

Ниже приведен пример снабжать струной, тетивой и т.п.

Здравствуйте, не погода просто абсолютно красиво сегодня !?

То, что я хотел бы, чтобы пользователь имел возможность сделать что-то вроде этого

Здравствуйте, не/бо погода просто/это красиво сегодня !?

принять к сведению /bo и /it

, что я хотел бы сделать, это иметь preg_match и или preg_replace утверждение, что находит и заменяет экземпляры /bo и /it и преобразует их вместо в HTML-теги, как bolded html tag и italics html tag (я не могу напечатать их здесь, или они преобразуются в фактический html, но обертываются вокруг слова сразу после /bo, поэтому в этом примере это будет

Hello, isn't the <b>weather</b> just <i>beautiful</i> today!? 

Любые идеи, как я мог сделать это с помощью regex?

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

+0

Вы можете ввести их здесь. Просто используйте блок кода. Если вы не можете, то введите его ... кто-то здесь сделает это за вас – Identity1

ответ

2
$string = "Hello, isn't the /bo weather just /it beautiful /bo today!?"; 

var_dump(preg_replace (array('/\/bo\s(\w+)/', '/\/it\s(\w+)/'), array('<b>$1</b>', '<i>$1</i>'), $string)); 

«Здравствуйте, не погода только прекрасныйсегодня!? "

+0

это сработало отлично – cjackson

+0

@Uchiha Ты всегда меня поправляешь, если что-то пойдет не так :) – splash58

+0

@Учиха, просто не говори никому :) Моя мама тренирует мозговое решение Sudoku Я решил использовать этот веб-сайт для этой цели, и до выхода на пенсию вспомнил программирование, что я не использовал последние 25 лет) – splash58

0

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

/\/(bo|it)\s+([\S]+)(?=\b)/g 

и замена строки

<$1>$2</$1> 

бы почти сделать это:

Hello, isn't the <bo>weather</bo> just <it>beautiful</it> today!? 

Но теги не совсем правильно все же ... Они нуждаются в быть одиночными буквами. :-(

Попробуйте здесь: https://regex101.com/r/oB9gT0/1

2.Edit - немного поздно, но теперь он работает:

$str=preg_replace('/\/([bi])((?<=b)o|(?<=i)t)\s+([\w]+)/','<$1>$3</$1>',$str); 

теперь будет поставлять правильный результат:

Hello, isn't the <b>weather</b> just <i>beautiful</i> today!? 

посмотреть здесь: https://regex101.com/r/oB9gT0/3

1

Для этой цели вы можете использовать preg_replace_callback.
Это в основном вызывает метод обратного вызова для каждого совпадающего события.
Внутри функции обратного вызова, вы можете выполнить замену в соответствии с вашими условиями
(жирным шрифтом для мали, курсив для него, направляясь он и др.)

Что-то вроде этого -

$str = "Hello, isn't the /bo weather just /it beautiful today!?"; 
$regex = "/\/(.*?)\s+(.+?)\b/"; 

function callback($matches){ 
    $type = $matches[1]; 
    $text = $matches[2]; 
    switch($type){ 
     case "bo": 
      return "<b>".$text."</b>"; 
      break; 
     case "it": 
      return "<i>".$text."</i>"; 
      break; 
     default: 
      return $text; 
    } 
} 

$resp = preg_replace_callback(
    $regex, 
    "callback", 
    $str 
); 

var_dump($resp); 

/* 
OUTPUT- 
Hello, isn't the <b>weather</b> just <i>beautiful</i> today!? 
*/ 

Этого примера может быть расширены далее путем проверки на различные типы и недопустимые типы

Смежные вопросы