(^)的用法

新手入门、经验交流

Moderator: cre

Forum rules
  • 软件自带帮助是最好的入门教程,请仔细阅读;在您掌握最基本知识前,我们没法帮助您
  • 提问前请先查阅软件帮助文件和论坛相关讨论
  • 查阅软件帮助和论坛相关讨论即可解决的问题帖将直接删除,以免浪费他人时间
  • 请学会如何提问,尽量将问题描述清楚,不明确的提问将被直接删除
白城哨站
Posts: 19
Joined: May 21 2014, 13:06

(^)的用法

Post by 白城哨站 »

匹配前面不是<br>的4个空格,这样通不过测试,应当怎么写?

Code: Select all

[Patterns]
Name = "New HTML filter"
Active = TRUE
Limit = 256
Match = "(^<br>)\&nbsp;\&nbsp;\&nbsp;\&nbsp;"
Replace = "<br><br>&nbsp;&nbsp;&nbsp;&nbsp;"
User avatar
phoenix
Site Admin
Posts: 526
Joined: Dec 29 2007, 16:27

Re: (^)的用法

Post by phoenix »

我测试下来没有问题。
2015-01-24_173201.png
2015-01-24_173201.png (13.01 KiB) Viewed 297616 times
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: (^)的用法

Post by cre »

菲菲老大你理解错了....
他的意思是 前面没有br的才匹配 就是说

Code: Select all

&nbsp&nbsp&nbsp&nbsp匹配
abc &nbsp&nbsp&nbsp&nbsp匹配
<br> &nbsp&nbsp&nbsp&nbsp不匹配
一般来说 用(^(^*<br>))\&nbsp;\&nbsp;\&nbsp;\&nbsp;是可以的
但是,这种写法在前面没有特征的时候,且不匹配时候,会要命的慢.
因为实在太低效了,不建议这么写.

我的建议是 分开处理 一条在上面处理前面带br的
match:<br /+> \&nbsp;\&nbsp;\&nbsp;\&nbsp;
不要开多重匹配
replace:<br /+>\&nbsp;\&nbsp;\&nbsp;\&nbsp;
和上面一样 相当于保护起来.非多重匹配时上面生效就不再往下试了

或者如果页面没有<p>&nbsp;&nbsp;&nbsp;&nbsp;这种的话
可以直接用
match:([^>])\1 &nbsp;\&nbsp;\&nbsp;\&nbsp;
replace:\1

应该是满足要求了

最高效的分别处理 这只是演示<br />实际应该替换为\1
最高效的分别处理 这只是演示
实际应该替换为\1
2015-01-25_092506.png (37.66 KiB) Viewed 297606 times
User avatar
phoenix
Site Admin
Posts: 526
Joined: Dec 29 2007, 16:27

Re: (^)的用法

Post by phoenix »

没理解错,但测试得不充分。 :(

这样如何:

Code: Select all

[Patterns]
Name = "New HTML filter"
Active = TRUE
Limit = 256
Match = "(????)\1\&nbsp;\&nbsp;\&nbsp;\&nbsp;(^$TST(\1=<br>))"
Replace = "\1"
仅供演示,实际规则可能还需调整。
2015-01-25_112030.png
2015-01-25_112030.png (12.77 KiB) Viewed 297602 times
白城哨站
Posts: 19
Joined: May 21 2014, 13:06

Re: (^)的用法

Post by 白城哨站 »

感谢两位解答,看到利用多重匹配真是会心一笑,原来都这么用!我想在删除<script*</script>的前提下保留某个语句,想不出办法,就把要保留的原样替换一次。
$TST原来是这样用,以前不知道判断了以后干嘛。
又想了下,(^)应该相当于正则里的(?=),向前看找位置,所以我用错了,应该用相当于(?<!)的才行。
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: (^)的用法

Post by cre »

早上时候我用过 ?+{4,6} 但是在这种情况下 只能确定是4还是6 结果就是跟????一样 而????|??????导致更低效而且不生效.
因为不能对<br />生效我就没讲.这并非好的写法.
菲菲老大写的其实有点多余.
就菲菲老大那条而言 用(^<br>)(????)\1\&nbsp;\&nbsp;\&nbsp;\&nbsp;就行
我由于认为有可能有<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\&nbsp;\&nbsp;\&nbsp;\&nbsp;"
Replace = "\1"

前面的??并没有匹配后面的??????匹配的是;和两个换行符与a
说是6个?实际^??<br>与<br />只是匹配的位置,只要位置对了时(就是^匹配到了[呵呵 平时我把^念作非 如果用说的我会说 如果前面的非 非到了]) ??????是不匹配的
请注意 ??????是匹配的6个而不是4个 换行符是2个字符而不是一个!

:!: 但那也是不正确的写法
正确就只有一种:

Code: Select all

[Patterns]
Name = "??<br>"
Active = TRUE
Limit = 256
Match = "(<br /+>\&nbsp;\&nbsp;\&nbsp;\&nbsp;)\1|\&nbsp;\&nbsp;\&nbsp;\&nbsp;"
Replace = "\1"

什么是正确的写法?正确的写法就是前面一定要确定.而不是avg一定要达到多少.那只是效率参考,高效低效和正确是两回事.
前面确定的情况下 后面正则考虑的太多也会avg上升.但那是两回事.
2015-01-26_003635.png
2015-01-26_003635.png (36.22 KiB) Viewed 297562 times
2015-01-26_012720.png
2015-01-26_012720.png (33.15 KiB) Viewed 297562 times
2015-01-26_005533.png
2015-01-26_005533.png (40.84 KiB) Viewed 297562 times
请注意 这和上面两个<br />都是<br />匹配没有问题!<br />因为上面匹配后 这里的nbsp前没有6个字符!<br />这只是思考上的局限,规则是按你写的正常工作的.
请注意 这和上面两个
都是
匹配没有问题!
因为上面匹配后 这里的nbsp前没有6个字符!
这只是思考上的局限,规则是按你写的正常工作的.
2015-01-26_005841.png (29.5 KiB) Viewed 297562 times
2015-01-26_005927.png
2015-01-26_005927.png (28 KiB) Viewed 297562 times
2015-01-26_010049.png
2015-01-26_010049.png (27.44 KiB) Viewed 297562 times
2015-01-26_010154.png
2015-01-26_010154.png (38.64 KiB) Viewed 297562 times
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: (^)的用法

Post by cre »

顺便附一张编码问题的图....??????前导时候不可以添加任何东西,不然如果是中文后面如果有ansi字符立刻就会出问题 :D
你发帖说过的问题说明你是喜欢折腾的,不过你好像不求甚解啊.
希望你对待问题的态度能严肃点,我觉得如果不搞明白为什么,那不如使用规则框架了.
2015-01-26_014447.png
2015-01-26_014447.png (28.12 KiB) Viewed 297563 times
白城哨站
Posts: 19
Joined: May 21 2014, 13:06

Re: (^)的用法

Post by 白城哨站 »

汗~太热心了!

我把(^)理解为正则(?!)对吗?这个是只能用在后面啊。比如Proxomitron的123(^<br>)等同于正则的123(?!<br>)。若位于前面(?!<br>)123这样写就没有意义,Proxomitron也是如此啊。

有几个不明白的地方

而????|????导致更低效而且不生效.因为不能对<br />生效我就没讲.这并非好的写法.
????|????没看懂,是不是??????|????这个?

说是6个?实际^??<br>与<br />只是匹配的位置,只要位置对了时(就是^匹配到了[呵呵 平时我把^念作非 如果用说的我会说 如果前面的非 非到了]) ??????是不匹配的
以及
贴图2015-01-26_012720.png中,“只要位置对了??????是不匹配的”
??????不匹配如何理解?\1不是捕获到了吗???????不是匹配到了“;换行换行a”?

另一帖的一并问了吧,http://forum.proxomitron.cn/viewtopic.p ... a1bdec35e0
phoenix指出我的代码不规范,虽然我看了那帖,但还是不知道问题在哪儿,是不是Match、Replace应该写在URL那行里?如果是的话,Match、Replace什么时候用?
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: (^)的用法

Post by cre »

我编辑修改了????|???? 改成了????|?????? 这个是手误 抱歉我发帖前虽然看了多遍但主要是看规则有没有写好和解释有没有错以及图片是否顺序对 这个低级错误却没注意到

把(^)理解为正则(?!)对吗?
对的,只是写法不太一样 没有(?!key)的写法 只有(^key) 没有(?=key) 只有(^(^key))
仔细想想你就能理解 非key 就是没有key; 非非key 就是不没有 就是有key

proxomitron和正则有点差别 proxomitron不会环视向前看
就是没有(?<=key)和(?<!key) 只是(?<=key)可以用(key)\1这种变通的方法 相当于有(?<=key)
但是强要(?<!key)这么来 效率损失是很大的

Code: Select all

说是6个?实际^??<br>与<br />只是匹配的位置,只要位置对了时(就是^匹配到了[呵呵 平时我把^念作非 如果用说的我会说 如果前面的非 非到了]) ??????是不匹配的

以及

贴图2015-01-26_012720.png中,“只要位置对了??????是不匹配的”
??????不匹配如何理解?\1不是捕获到了吗???????不是匹配到了“;换行换行a”?
我觉得这里你应该理解的,我专门上了图.

6个?实际^??<br>与<br />只是匹配的位置
只要位置对了时 就是^匹配到了[呵呵 平时我把^念作非 如果用说的我会说 如果前面的非 非到了]

就是说假设有个bef(^key)
遇到befabc 就是匹配到了,但是^没匹配到 说成"没非到"可以吧?
但是befkey 这个没匹配到 说成"非到了" 这个说法应该并没有问题.
不是我要搞个"非到非不到"概念迷惑你,而是这匹配的说不匹配 不匹配的说匹配 不好解释 我觉得说起来不好让你明白或者要更多的口水.

位置对了时 就是非到了的时候 ??????就不匹配 你看到br处有被\1替换吗? 没有,没非到br的才替换了. 就是这个样子.

正则方面我基本都用补全替代了,你让我没工具情况下给你讲表达式环视 我倒是不敢说一定都正确 我基本就没手写过....因为毕竟有说明更好用
对于你这个,正则可以(?<!key) proxomitron 不可以.
2015-01-26_202502.png
2015-01-26_202502.png (18.96 KiB) Viewed 297529 times
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: (^)的用法

Post by cre »

菲菲老大说你不规范 那是说 你的jump没加 http:// 而header的urlmacth和web的一样 你的\0应该是不包括http://的
而我说你不求甚解 那帖子也有点关系
因为 match #和后面 不会被捕获 除非用\a[\a这个我也不熟悉,基本没用过.应以phoenix说的和帮助文件为准]
而我给你的 无需web删就能用 如果你是要跳转到#lastpost 直接在跳转那写是可以的 replace那里是没有#的问题的!
原帖我也说明了 我想你只导入后面的测试了吧?
只不过后面是写死的,前面并没有.就是说 让你自己确定跳转的加不加#lastpost
你都觉得挺不错了我还能说什么?现在你觉得有点错了我就跟你白话白话.

Code: Select all

by phoenix » Oct 09 2008, 19:30
注意$JUMP()命令的用法:$JUMP(http://some.url.com/)
看图就行了
2015-01-26_213637.png
2015-01-26_213637.png (34.41 KiB) Viewed 297527 times
Post Reply