假设您有一个字符串要分割成最大大小为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个字符(%加上两个十六进制数字)。如果可以,那么,否则它会将数据桶中的内容推送到数据块阵列中,并从一个新桶开始。
答案 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