Как переписать регулярное выражение (? - PullRequest
1 голос
/ 06 декабря 2010

Я пишу конвертер архива блога в ruby. Чтобы преобразовать содержимое записей WordPress в формат HTML, я должен реализовать функцию WordPress wpautop ().

Оригинальная функция wpautop (): http://pastebin.com/BzV8bXxQ

Мой рубиновый агрегат: https://github.com/chloerei/blog_converter/blob/master/lib/blog_converter/adaptor/wordpress.rb, см. Wordpress#wpautop_filter

Отлично работает в ruby1.9.2, bu в 1.8.7, выдает ошибку

blog_converter/lib/blog_converter/adaptor/wordpress.rb:147: undefined (?...) sequence: /(?<!<br \/>)\s*\n/

Источники

// In php
$pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks

# In ruby
string.gsub!(%r|(?<!<br />)\s*\n|, "<br />\n") # optionally make line breaks

После некоторого поиска я обнаружил, что ruby1.8.7 не имеет нового движка регулярных выражений 'Oniguruma', он не поддерживает новый синтаксис регулярных выражений.

Так что я думаю, что у меня есть два пути:

  1. Добавить зависимую 'oniguruma' при использовании ruby ​​<1.9.0 </li>
  2. Переписать /(?<!<br \/>)\s*\n/ в старом синтаксисе

Какой путь лучше? А как переписать это регулярное выражение?

Ответы [ 2 ]

3 голосов
/ 06 декабря 2010

Попробуйте это .gsub!(%r|(<br />)?\s*\n|, "<br />\n")

3 голосов
/ 06 декабря 2010

Если не работает прогнозное утверждение, вам может понравиться это (внимание! - не проверено - у меня нет 1.8):

string.gsub!(%r|(<br />)?\s*\n|, "<br />\n")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...