Как разбить строку на куски с помощью регулярных выражений, сохраняя при этом специальные символы URI - PullRequest
2 голосов
/ 25 ноября 2010

Предположим, у вас есть строка, которую вы хотите разбить на куски, имеющие максимальный размер x символов.Если вы игнорируете новые строки, подходящим регулярным выражением будет следующее. {1, x}

Проблема, с которой я столкнулся, заключается в том, что я хочу сохранить вместе специальные символы URI, такие как% 20.

Пример:

Привет% 20world% 20how% 20are% 20you% 20today

Делая «тупой» чанк с 5-ю символьными чанками, вы получаете:% 20wo
rld% 2
0how%
20are
% 20yo
u% 20t
oday

Чего я хочу добиться, это:

Hello
% 20wo
rld
% 20ho
w% 20a
re% 20
you
% 20to
day

Is thisдаже возможно только с регулярными выражениями?В настоящее время у меня есть рабочее решение с циклом, который проходит через каждый символ и заполняет ведро.Если корзина заполнена, она добавляет свое содержимое в массив кусков и очищает его.Тем не менее, он также проверяет, является ли текущий символ% и может ли корзина содержать еще 3 символа (% плюс две шестнадцатеричные цифры).Если это возможно, хорошо, иначе это подтолкнет содержимое сегмента в массиве чанков и начнется с нового фрагмента.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2010

Сохраняйте это простым, оставайтесь с вашим рабочим решением с циклом, возможно, он быстрее и в десять раз более читабельным .... http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two-problems.html

0 голосов
/ 25 ноября 2010

Попробуйте использовать это регулярное выражение для соответствия всем частям:

/(%[0-9A-F]{2}[^%]?[^%]?|[^%]%[0-9A-F]{2}[^%]?|[^%][^%]%[0-9A-F]{2}|[^%]{1,5})/

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

  • %[0-9A-F]{2}[^%]?[^%]? - октет с кодировкой в ​​процентах, за которым следует не более двух не % символов
  • [^%]%[0-9A-F]{2}[^%]? - один не % символ, за которым следует октет с кодировкой в ​​процентах, за которым следует не более одного не % символа
  • [^%][^%]%[0-9A-F]{2} - два не % символа, за которыми следует октет с кодировкой в ​​процентах
  • [^%]{1,5} - от одного до пяти не % символов
...