2016-07-18 4 views
1

Я хочу, чтобы фигурные скобки удалялись вне texs math-mode. Например:Удаление фигурных скобок за пределами texs math-mode

Lorem Ipsum $\mathbb{R}$ dolore. {Author} $\{1,\dotsc,n}$ 

должны стать:

Lorem Ipsum $\mathbb{R}$ dolore. Author $\{1,\dotsc,n}$ 

Как вы не можете отрицать регулярные выражения, которые я искал в поиске в aheads и -behinds. Это не работало для меня, как технически говоря, {Автор} также находится между двумя знаками доллара. Некоторый специалист по регулярному выражению имеет некоторые советы для меня?

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

ответ

1

Вы можете использовать это опережение регулярное выражение на основе:

$re = '/\$\\\w*{[^}]+}(*SKIP)(*F)|{[^}]*}/'; 
$str = "Lorem Ipsum \$\mathbb{R}\$ dolore. {Author} \${1,\dotsc,n}\$"; 

$result = preg_replace($re, '', $str); 

//=> Lorem Ipsum $\mathbb{R}$ dolore. Author $\{1,\dotsc,n}$ 

RegEx Demo

Здесь мы используем PCRE глаголы (*SKIP)(*F) пропустить блоки математики режима и заменить { и } в остальной части текста:

+0

Спасибо @ WiktorStribiżew, я добавил эту опцию также в ответ – anubhava

+1

Большое спасибо, я проверил время выполнения как на моем 2.1GHz двухъядерном ноутбуке с PHP 5.5.9. Разница заметна, но небольшая. 100k preg_replace вызывает, а затем усредняет, дает примерно: отрицательный результат: 4.5 * 10^-6 sec/preg_replace и PCRE: 4.0 * 10^-6 sec/preg_replace – Wipster

+0

Я заметил, что регулярное выражение удалит все фигурные скобки для таких случаев: $ \ mathbb {R} $ dolore. {Author} «Есть ли у вас какой-то совет, что нужно изменить, чтобы работать, когда перед долларом есть белые пробелы? – Wipster

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

  • Нет связанных вопросов^_^