2013-03-31 6 views
1

Как я могу по желанию сопоставить начало ^ или конец $ строки в регулярном выражении.Регулярное выражение опциональное совпадение начало/конец строки

Например:

/(?<=[\s\^])/ не соответствует начинается с символа пробела или начала строки.

В соответствии с запросом моя проблема была в PHP, соответствующем следующему.

$str = '**bold** **bold** **bold**'; 
echo preg_replace('/(?<=\s|^)\*\*(.+?)\*\*(?=\s|$)/', '<strong>\\1</strong>', $str); 

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

echo preg_replace('/(?<=^|\s|\>)[\*]{2,}(?=[^\s\*])(.+?)(?<=[^\s\*])[\*]{2,}(?=\s|\<|$)/', '<strong>\\1</strong>', $str); 
+2

Если вы их удалите, то они не являются обязательными. –

+0

Вы ищете эти функции http://www.regular-expressions.info/lookaround.html – eandersson

ответ

3

Если вы настаиваете на согласование после символа пробела или начала использования линииalternation (не character class). Предполагая, что ваш аромат регулярного выражения поддерживает чередование в lookbehind assertions.

/(?<=\s|^)\w+/m 

, но, вероятно, вы ищете word boundary\b? Они соответствуют началу или концу слова. (Точно по изменению от символа слова до символа без слова или наоборот)

Вы должны предоставить нам дополнительную информацию: язык, ввод и ожидаемый результат (включая угловые случаи).

+0

Спасибо большое :) – esryl

0

Просто снимите якоря. Без привязок регулярное выражение будет сопоставляться в любом месте строки, которую вы ищете.

+0

Добавлен пример с look-behind, чтобы показать, что я пытаюсь сопоставить, пробельный символ или начало строки. – esryl

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