掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 925|回复: 25

[求助] 正则表达式替换问题:如何给HTML正文斜杠加上标签

[复制链接]
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

    发表于 2019-1-16 16:00:34 | 显示全部楼层 |阅读模式
    本帖最后由 atauzki 于 2019-1-16 19:03 编辑
    4 P$ v/ d: p6 \8 w, o
    , v( F8 o' d- P1 S5 C; c: j$ U9 u" F如何将类似
    1. <script type="text/javascript"></script><span class="foo">a foo/bar/baz/...<a href="entry://localhost/vbiauedbvie0">aaa/bbb/ccc/ddd</a>ee/fff/gg</span>
    复制代码
    * V% e6 @2 n: J2 I$ \
    这类字符串替换成
    1. <script type="text/javascript"></script><span class="foo">a foo<span class="sep">/</span>bar<span class="sep">/</span>baz<span class="sep">/</span>...<a href="entry://localhost/vbiauedbvie0">aaa<span class="sep">/</span>bbb<span class="sep">/</span>ccc<span class="sep">/</span>ddd</a>ee<span class="sep">/</span>fff<span class="sep">/</span>gg</span>
    复制代码
    1 q# Q# c' Q3 ]+ `9 x
    要替换的文本中标签可能存在url,嵌套任意,正文内容中单词数量可变。现在要求保持标签内部斜杠不变,正文里斜杠被<span class="sep">标签包围。2 }2 @  r/ i( X& R# y
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-17 10:59:38 | 显示全部楼层
    本帖最后由 atauzki 于 2019-1-17 13:51 编辑   J) u; n+ p: d7 y9 |* }) D0 G# F
    jonah_w 发表于 2019-1-16 23:32
    ; Q2 C' Y, m, H( l9 ?, d7 z可能编辑器对正则的支持不尽相同,我这边是可以的。
      u6 h# o" h; n: c
    确实如此。安卓quickedit测试成功。这个编辑器的正则引擎就是java的自带正则库,emeditor默认用的boost4 M  I8 D+ H6 R% t" S1 _* B4 k
    UPADTE:(?<=>)([^<>]+?)(\/)([^<>]+?)(?=<)可以替换。转义符不能随便用。
    9 F# m/ D, S1 B5 }

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
  • TA的每日心情
    慵懒
    2019-1-23 10:04
  • 签到天数: 122 天

    [LV.7]常住居民III

    发表于 2019-1-16 18:08:21 | 显示全部楼层
    可以先缩小至需要替换的范围,然后在选中范围内进一步作替换。7 i3 k, C9 Q8 l6 S- `) v! p0 C  m" E; }

    / ~! H: O8 U) L2 s. J1 Q+ DEmEditor里可以这么做:
    6 C; b- ~( C! f* ~: {<a href="..."></a>内的斜杠
    . z; y* _0 _( }& h" c1. 查找全部:, C! M( M& H9 q6 k$ o1 K
    1. (?<=">)([^<]*?)(?=</a>)
    复制代码
    2. 勾选仅限于选区内 (in the selection only),再将"/"替换成"<span class="sep">/</span>"
    4 E% ]  Z; V, U' x, a0 u2 t* H* ~" ~/ a5 S: n5 P
    # G; c7 \. j7 H! }6 {! \. b
    紧接在<span class="foo">后面的斜杠+ z- v+ T0 s9 `4 w, w
    1. 查找全部
    : `2 d9 \& @5 }9 M/ A( O
    1. (?<=<span class="foo">)([^<]*?)(?=<)
    复制代码
    2. 勾选仅限于选区内 (in the selection only),再将"/"替换成"<span class="sep">/</span>"

    评分

    2

    查看全部评分

  • TA的每日心情
    开心
    2019-1-18 23:55
  • 签到天数: 230 天

    [LV.7]常住居民III

    发表于 2019-1-16 16:20:11 来自手机 | 显示全部楼层
    先替换标签内容,再换正文,最后把标签内容恢复回去,应该可以
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 16:44:34 | 显示全部楼层
    你敢保证所有形式都这样吗?如果是的话,不就是把“/”替换成了“<span class="sep">/</span>”吗 正常替换不就行了吗
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-16 16:51:40 | 显示全部楼层
    dothu 发表于 2019-1-16 16:44
    . V; w' ?1 G" F% I& n( Z你敢保证所有形式都这样吗?如果是的话,不就是把“/”替换成了“/”吗 正常替换不就行了吗 ...

    ; s7 u, I4 s0 \7 [/ E: X! U- U要排除掉html标签内的斜杠,以及<a href=...>的斜杠
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 17:15:53 | 显示全部楼层
    不用管标签内的斜杠,[^>]就连同斜杠一起排除了5 Z+ D/ V5 F! T) ?$ M
    8 M5 Q; _6 ?: \) c+ p8 N
    查找
    ( G. M0 B6 I0 V1 x
    1. (<a href="entry://[^>]*?>\w+?)(/)(\w+?)(/)(\w+?)(/)(\w+?</a>)
    复制代码
    9 [' @, J& E9 R
    替换
    8 k! g/ T$ u: |
    1. \1<span class="sep">\2</span>\3<span class="sep">\4</span>\5<span class="sep">\6</span>\7
    复制代码
    - u( t2 r& }: M
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-16 17:23:03 | 显示全部楼层
    dothu 发表于 2019-1-16 17:15
    + Q% p' g! C; l4 _不用管标签内的斜杠,[^>]就连同斜杠一起排除了* `" Y1 \# G# ?6 X

    2 K3 x# S- ^4 _$ k. i/ B" `查找

    - y4 z4 R" K6 d4 v3 g( W5 H如果标签内斜杠数目有变化呢
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 17:25:37 | 显示全部楼层
    atauzki 发表于 2019-1-16 17:23
    " N# N& ~1 ~$ J. O% p/ K9 H如果标签内斜杠数目有变化呢

    6 i, U7 h% B5 b5 n你是说标签内包含的aaa|bbb|ccc有变化是吧,对啊,所以刚才问你是不是严格准守这个格式啊
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-16 17:43:57 | 显示全部楼层
    dothu 发表于 2019-1-16 17:250 n* {" |$ a5 d% k4 {& x
    你是说标签内包含的aaa|bbb|ccc有变化是吧,对啊,所以刚才问你是不是严格准守这个格式啊 ...
    8 p9 I& k7 v; u2 N
    不严格遵守啊,我刚才编辑了一下1楼的问题。基本上就是最一般的情况。
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 18:17:20 | 显示全部楼层
    atauzki 发表于 2019-1-16 17:43. G9 S5 h* ~  l* L" K# g
    不严格遵守啊,我刚才编辑了一下1楼的问题。基本上就是最一般的情况。

    ; E. Q: o- ]6 K你这种情况能一次匹配,但不能替换,正则没法替换计数的匹配。只能采用多次匹配替换,或者脚本。
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 18:20:12 | 显示全部楼层
    嗯,9楼方法简单,完全可行,我还没注意EmEditor有这么个功能,这软件果然是个好东西。。。
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-1-16 19:00:58 | 显示全部楼层
    供参考:
    : [# M1 W( U3 u+ P! O7 y
    3 T, S+ h# V% m- M
    1. (?<=\>)([^<>]+?)(\/)([^<>]+?)(?=<)
    复制代码
    ) A( @. j) g# h, b# g

    6 G8 ~( i. J. `) @& R9 X替换为:
    ! k7 K1 J) |2 l% m4 N4 z: @3 _$ @3 D6 S( Y, S6 f
    1. \1<span class="sep">/</span>\3
    复制代码
    2 _/ v" v& w6 z( j

    " g8 J* R: _3 B# {& p, _! \8 U注:需多次替换
  • TA的每日心情
    奋斗
    2019-10-13 07:34
  • 签到天数: 209 天

    [LV.7]常住居民III

    发表于 2019-1-16 19:04:45 | 显示全部楼层
    应该一步就可以替换到位:搜索>……<之间的/替换即可,其中>……<是指以>开头,以<结尾

    评分

    1

    查看全部评分

  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 20:15:33 | 显示全部楼层
    VimVim 发表于 2019-1-16 19:04% ~: g! `5 e; O7 m
    应该一步就可以替换到位:搜索>…………开头,以
    0 ]1 ^* G7 Z4 M+ y" g
    这个我想过,但从我经验上看是很容易误伤。其实我3楼就是这个意思... 0_0!

    点评

    3楼的方法应该会误伤诸如此类的替换吧:<a href="entry://localhost/vbiauedbvie0">  发表于 2019-1-16 20:17
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-16 20:20:18 | 显示全部楼层
    不,我的意思是你那个,> ... <, 当然不可能是纯的直接替换...

    该用户从未签到

    发表于 2019-1-16 20:24:57 | 显示全部楼层
    本帖最后由 dongzhi1980 于 2019-1-16 20:50 编辑 ; R7 ^+ U6 \6 m
    , _! B, u# \/ F
    个人认为至少需要两步:(在Emeditor环境中通过)- i# X" ~+ G# K
    1.ctrl+F弹出页面输入 >[^<].*?/.*?< 点击 选中所有,再在同一界面下点击 替换! S2 H9 ]/ B0 R
    2.取消正则模式,点击 仅限选区内后输入 查找 / 替换为 <span class="sep">/</span> 再点击全部替换,收功。* Z$ D' z3 P  \- k( h1 m
    附件为图片,详细过程) z- q* N7 X2 d
    基本思想是:1.选中全部非标签区域内容;2.在选中的区域中替换掉全部的/。就这样
    3 E  ~* k- p9 ^. T6 H4 n: A! g% p6 X6 e  e! M& [

    1 G# n" X% f; a" _1 T/ R4 T# y1 W! X$ I: I4 ?$ m6 N

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-16 20:34:37 | 显示全部楼层
    jonah_w 发表于 2019-1-16 19:007 N+ p7 ?; J& w8 ~& Y. f' \
    供参考:

    * v' M, F* S( u% i9 s: V; j这个不行。最后还有残留。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-16 20:37:30 | 显示全部楼层
    本帖最后由 atauzki 于 2019-1-16 20:55 编辑 - V  f9 d+ x/ j# f
    4 r6 W* q/ S0 h( G" G6 r
    用这个(?=>)[^<]+?(?=<)然后全选替换。
    + M% w2 R; O! I3 f0 \- e结果和16楼基本一样。

    该用户从未签到

    发表于 2019-1-16 20:44:54 | 显示全部楼层
    本帖最后由 dongzhi1980 于 2019-1-16 20:46 编辑
    8 w% H6 A, y* T4 ]0 \/ n
    atauzki 发表于 2019-1-16 20:37/ V3 R6 [& `% b* S- D9 ?
    用这个(?=>)[^

    * u9 c  ^# b8 L  x1 F( e% v你看懂16楼的方法了吗,再下载图片看看详细过程吧,我是调试通过了才贴出方法的, b' N1 R  W, B' y# v( V2 ?9 s; v
  • TA的每日心情
    慵懒
    2021-9-28 14:33
  • 签到天数: 158 天

    [LV.7]常住居民III

     楼主| 发表于 2019-1-16 20:54:25 | 显示全部楼层
    本帖最后由 atauzki 于 2019-1-16 21:01 编辑
    ! e6 p- n( ~$ n
    dongzhi1980 发表于 2019-1-16 20:44
    5 G  a: d# _  w( e/ h7 B  ^! _9 C你看懂16楼的方法了吗,再下载图片看看详细过程吧,我是调试通过了才贴出方法的1 _; r) g8 Z+ W
    ...

    , Z3 M% U% x& F! D0 b! r测试过了。详细过程不一样,我还是明白的。第二步我就不贴了。2 ~. o7 ~) Z- Z9 \7 }2 l& A

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x

    该用户从未签到

    发表于 2019-1-16 21:03:02 | 显示全部楼层
    本帖最后由 dongzhi1980 于 2019-1-17 10:31 编辑
    # A* Z4 N3 Y# S6 N6 }' O1 y
    atauzki 发表于 2019-1-16 20:54
    . Y9 _3 z  A3 \5 }8 n; g) \测试过了。详细过程不一样,我还是明白的。

    # U6 M' Z3 z) Y1 S3 D8 b仔细想一想,第一步用正则可以成功选中非标签区域的所有内容(包括“/”),然后第二步用正常方法(非正则)对选中的内容中的“/”进行替换,怎么能不成功。: B0 o. u- G$ v# u$ e& S

    / Z; l* Q6 B2 R4 A看了你的图片,可能是我没说清楚,第一步的目的是选中全部非标签区域,你做对了,然后选中目标后点击 “同一对话框”中的替换(就在那对话框下面),就会自动切换到“替换”对话框,然后在替换对话框中按我的图片2中的进行操作就行了(注意“取消正则”并点击“仅选中的内容”这两项)。
    ( f1 z4 _3 z3 T% K2 b; K下面这个附件中是我录制的视频操作过程,可以参考一下(EmEditor Version 18.4.0)
    % `% k! [5 d0 l, Z3 z/ y( K
    4 ^8 E" e) J) c0 s, P- a# s  w% u

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-1-16 23:32:58 | 显示全部楼层
    atauzki 发表于 2019-1-16 20:34& H/ F" p% T5 O* H& D' Y  N
    这个不行。最后还有残留。
    $ d1 M0 v) ]- z4 ^" c* U9 L8 m& w
    可能编辑器对正则的支持不尽相同,我这边是可以的。
  • TA的每日心情
    擦汗
    2019-12-4 09:00
  • 签到天数: 302 天

    [LV.8]以坛为家I

    发表于 2019-1-17 10:24:34 | 显示全部楼层
    哦去,这个问题还没结束啊,建议按9楼的方法,就是借助EmEditor正则取出一部分再正则替换一次,最能减少误伤几率,还不用手动写脚本。
  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    发表于 2019-1-17 12:28:02 | 显示全部楼层
    >[^<]+< 不是可以完美定位?. `2 a1 M1 [$ x9 ]* N6 P  E9 F

    & i6 x* ?  r( J* l5 b# {https://regex101.com/r/MAw0Wr/1/
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2024-4-23 20:43 , Processed in 0.078563 second(s), 16 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

    快速回复 返回顶部 返回列表