2012-03-11 1 views
3

Моя строка содержит некоторые «горячие клавиши» формы [hotkey]. Например:Как выбрать между взрывом и регулярным выражением

"This is a sample string [red] [h1]" 

Когда я обрабатываю эту строку с функцией PHP, я хотел бы функцию, чтобы вывести исходную строку следующим образом;

<font color='red'><h1>This is a sample string</h1></font> 

Я хотел бы использовать эту функцию исключительно для удобства, упрощая некоторые типизации. Я могу использовать тег шрифта или div или что-то еще, не будем вдаваться в это. Дело в этом; горячая клавиша будет вызывать исходную строку, чтобы быть обернуты в

<something here>original string<and something there> 

Таким образом, функция сначала должен определить, есть ли какие-либо клавиши или нет. Это легко; просто проверьте, существует ли какое-либо существование [

Затем нам нужно обработать строку, чтобы определить, какие горячие клавиши существуют и войти в логику бизнес-класса, в отношении которой будут развернуты оболочки.

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

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

шаг 1 взорвать строку в массив с помощью [ разделителя

шагу 2 пройти через каждый элемент массива, чтобы увидеть, если закрытие ] присутствует и образует один из определенных горячих клавиш, и если да, сделайте необходимое.

Очевидно, что этот метод не использует никакой регулярной силы. Мне интересно, может ли regex помочь здесь. Или, лучший способ сделать это вы можете предложить?

+1

Должен сказать: не прочитал весь вопрос. Но вы должны google для «BBCode Parser PHP». Уже есть готовые к использованию реализации, для (как кажется) того, чего вы хотите достичь. – KingCrunch

+0

Я думаю, что regex - это способ пойти – dotoree

ответ

0

Если [ и ] единственные разделители вам нужно беспокоиться о том, вы могли бы, вероятно, использовать strtok

+0

Я прочитал strtok после того, как вы упомянули об этом, но не поняли его. Я не знаю, как я могу использовать его здесь. Наверное, мне придется придерживаться моего первоначального псевдо-алгоритма. –

0

Я не говорю по-английски, но я видел ваш пример:

"This is a sample string [red] [h1]"

<font color='red'><h1>This is a sample string</h1></font> 

Если бы вы были:

$red = substr($chaine, strpos($chaine, '['), strpos($chaine, ']'));