如何使用正则表达式将字符串拆分为块,同时将URI编码的特殊字符保持在一起

时间:2010-11-24 22:59:59

标签: regex string url split uri

假设您有一个字符串要分割成最大大小为x个字符的块。如果忽略新行,则合适的正则表达式为。{1,x}

我遇到的问题是我想保留URI编码的特殊字符,例如%20。

示例:

您好%20world%20how%20顷%20you%20today

使用5个字符的块进行“哑”分块,最终得到:

您好
%20wo
RLD%2
0how%
20顷
%20yo
U%20吨
ODAY

我想要实现的目标是:

您好
%20wo
RLD
%20ho
W%20A
重新%20

%20to

只有正则表达式才能实现这一点吗?我目前有一个工作解决方案,循环遍历每个角色并填充一个桶。如果存储桶已满,则会将其内容添加到一个块数组中并清空它。但是,它还会检查当前字符是否为%,以及存储桶是否能够容纳3个字符(%加上两个十六进制数字)。如果可以,那么,否则它会将数据桶中的内容推送到数据块阵列中,并从一个新桶开始。

2 个答案:

答案 0 :(得分:0)

尝试使用此正则表达式匹配所有部分:

/(%[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} - 一至五个非%字符

答案 1 :(得分:0)

保持简单,使用循环保持您的工作解决方案,它可能更快,可读性提高十倍...... http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two-problems.html