早上时候我用过 ?+{4,6} 但是在这种情况下 只能确定是4还是6 结果就是跟????一样 而????|??????导致更低效而且不生效.
因为不能对<br />生效我就没讲.这并非好的写法.
菲菲老大写的其实有点多余.
就菲菲老大那条而言 用(^<br>)(????)\1\ \ \ \ 就行
我由于认为有可能有<br />的存在,认为这不妥.
事实上菲菲老大写的在应对<br />时 没有对策 不说<br><br />同时存在 就只<br />存在就无法应对. $tst也是多余的.
解释下(^<br>)(????)\1
(^<br>)匹配的是一个4字符的位置.如果不跟????,可以自己测试会出现什么.而(????)\1是因为要"不匹配",就要抓回去....
说句不雅的,这种前导用法就是脱裤子那啥....
就这种????写法而言,我个人认为,不该用在这种地方
应该用的场合是前面已经决定了,后面确定位数的场合
比如
imgs.zhangmen.baidu.com/mp3index/20??/
以及直接上中文的场合 就是这种\1用法
proxomitron第一个字符为中文时候我记得不生效,要用(??????)\1 免得utf8问题.ansi是2字节 utf8是3字节 就是匹配3个ansi或者2个utf8中文 这种一般是不会写的,知道就行了.只是唯有这种情况时候才是非用?作前导不可的.这种时候只考虑正确不考虑效率.
更好的写法是这样
Code: Select all
[Patterns]
Name = "??<br>"
Active = TRUE
Limit = 256
Match = "(^??<br>|<br />)(??????)\1\ \ \ \ "
Replace = "\1"
前面的??并没有匹配后面的??????匹配的是;和两个换行符与a
说是6个?实际^??<br>与<br />只是匹配的位置,只要位置对了时(就是^匹配到了[呵呵 平时我把^念作非 如果用说的我会说 如果前面的非 非到了]) ??????是不匹配的
请注意 ??????是匹配的6个而不是4个
换行符是2个字符而不是一个!
但那也是不正确的写法
正确就只有一种:
Code: Select all
[Patterns]
Name = "??<br>"
Active = TRUE
Limit = 256
Match = "(<br /+>\ \ \ \ )\1|\ \ \ \ "
Replace = "\1"
什么是正确的写法?正确的写法就是前面一定要确定.而不是avg一定要达到多少.那只是效率参考,高效低效和正确是两回事.
前面确定的情况下 后面正则考虑的太多也会avg上升.但那是两回事.
- 2015-01-26_003635.png (36.22 KiB) Viewed 306025 times
- 2015-01-26_012720.png (33.15 KiB) Viewed 306025 times
- 2015-01-26_005533.png (40.84 KiB) Viewed 306025 times
- 请注意 这和上面两个
都是
匹配没有问题!
因为上面匹配后 这里的nbsp前没有6个字符!
这只是思考上的局限,规则是按你写的正常工作的. - 2015-01-26_005841.png (29.5 KiB) Viewed 306025 times
- 2015-01-26_005927.png (28 KiB) Viewed 306025 times
- 2015-01-26_010049.png (27.44 KiB) Viewed 306025 times
- 2015-01-26_010154.png (38.64 KiB) Viewed 306025 times