Regex и BBCodes - PullRequest
       57

Regex и BBCodes

1 голос
/ 26 апреля 2011

В прошлом я мало работал с bb-кодами или регулярными выражениями, но я нашел несколько учебных пособий, которые помогли мне понять основной способ сделать это.Я хочу использовать определенный метод, поэтому я объединил некоторые методы из этих уроков, чтобы получить то, что я хочу.Единственное, что это не работает.Я получаю сообщение об ошибке: «Компиляция не удалась: несоответствующие скобки со смещением 11». Я понятия не имею, что означает смещение 11, и я проверил все свои скобки, и нет открытых наборов.Вот мой код:

function bbParse($string){</p> <pre> $codes = array( '/\[b\](.+?)\[\/b\]/' => '<b>$1</b>', '/\[h2\](.+?)\[\/h2\]/' => '<h2>$1</h2>', '/\[h3\](.+?)\[\/h3\]/' => '<h3>$1</h3>', '/\[p\](.+?)\[\/p\]/' => '<p>$1</p>', '/\[quote\](.+?)\[\/quote\]/' => '<blockquote>$1</blockquote>', '/\[img\](.+?)\[\/img\]/' => '<img src=\'$1\' alt=\'Image Not Available\'>', '/\[url=\(.+?)\](.+?)\[\/url\]/' => '<a href=\'$1\'>$2</a>' ); $string = preg_replace(array_keys($codes), array_values($codes), $string); return $string; }

Ответы [ 3 ]

3 голосов
/ 26 апреля 2011

/\[url=\(.+?)\](.+?)\[\/url\]/

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

/\[url=(.+?)\](.+?)\[\/url\]/

1 голос
/ 26 апреля 2011

Здесь вы экранируете (, поэтому он терпит неудачу, потому что нет ( до следующего ):

'/\[url=\(.+?)\](.+?)\[\/url\]/' => '<a href=\'$1\'>$2</a>'
1 голос
/ 26 апреля 2011

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

...