2015-03-24 3 views
1

Мне нужна система, в которой он будет искать строку в определенном шаблоне, а затем добавит к ней определенный тег HTML, но удалит строку поиска.Regex remove match prefix php

Например, если строка матч %% и кто-то напечатал этот %%MyString он должен преобразовать его в этом <p class="myClass">MyString </p> без %% перед ним.

Вот мой код, который я пробовал. Я думаю, что он должен что-то сделать с ${99}. Я пробовал $0, но это все равно дает мне строку соответствия.

function convertLabels($str){ 
    $regex = "/<(.*?)>[%]+([a-zA-Z0-9_]+)<(.*?)>/"; 
    $str = preg_replace($regex, '<a href="listhash.php?tag=$1" class="label label-default">${99}</a>', $str); 
    $regex = "/<(.*?)>[%%]+([a-zA-Z0-9_]+)<(.*?)>/"; 
    $str = preg_replace($regex, '<a href="listhash.php?tag=$1" class="label label-primary">${99}</a>', $str); 
    $regex = "/<(.*?)>[%!]+([a-zA-Z0-9_]+)<(.*?)>/"; 
    $str = preg_replace($regex, '<a href="listhash.php?tag=$1" class="label label-info">${99}</a>', $str); 
    $regex = "/<(.*?)>[%%!]+([a-zA-Z0-9_]+)<(.*?)>/"; 
    $str = preg_replace($regex, '<a href="listhash.php?tag=$1" class="label label-warning">${99}</a>', $str); 
    $regex = "/<(.*?)>[%!!]+([a-zA-Z0-9_]+)<(.*?)>/"; 
    $str = preg_replace($regex, '<a href="listhash.php?tag=$1" class="label label-danger">${99}</a>', $str); 
    return($str); 
} 
+0

Укажите примерную строку ввода и ожидаемую выходную строку. –

ответ

1

Это то, что вы хотите?

function convertLabels($str){ 
    $regex = "/%%([^\s]+)/"; 
    $str = preg_replace($regex, '<p class="myClass">${1}</p>', $str); 

    return $str; 
} 


echo convertLabels("wrap the %%text with a p tag"); 

Выход:

wrap the <p class="myClass">text</p> with a p tag 

Объяснение:

[^\s]+ ... один или более произвольные символы (за исключением пробельных символов)

${1} является обратной ссылкой на первое выражение в скобках шаблон, который равен ([^\s]+), а это означает, что весь текст между %% и следующий пробел.

+0

Да, это то, что я хочу ... Я вижу –