regex 正则表达式到达特定符号时停止连续匹配

zbdgwd5y  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(149)

我想删除两个符号<>之间的字母和数字以外的字符,字符串为<F=*A*B*C*>

(?<=F=|\G(?!^))[A-Za-z1-9]*\K[^A-Za-z1-9]+

 //output:<F=ABC 

 (?:^<F=(?=.+>$)|\G(?!^))[A-Za-z1-9]*\K[^A-Za-z1-9]+
 
 //output:<F=ABC

这个正则表达式模式也捕获了最后一个结束标记并将其删除(<F=ABC)。如何使它停止在特定的符号处并避免捕获最后一个结束标记。
当我在[^A-Za-z1-9]中添加>时,它可以正确地移除>符号以外的字符。

(?<=F=|\G(?!^))[A-Za-z1-9]*\K[^A-Za-z1-9>]+

//output: <F=ABC>// desired result

从这个符号开始定义停止匹配的正确方法是什么?谢谢。

w46czmvw

w46czmvw1#

您可以使用

(?:\G(?!^)|<F=)[^<>]*?\K[^A-Za-z0-9<>]+(?=[^<>]*>)

请参见regex demo

  • 详细信息 *:
  • (?:\G(?!^)|<F=)-上一个匹配的结尾或<F=文本
  • [^<>]*?-除<>之外的任何零个或多个字符,尽可能少
  • \K- match reset运算符,用于从整个匹配内存缓冲区中丢弃目前匹配的文本
  • [^A-Za-z0-9<>]+-ASCII字母/数字以及<>字符以外的一个或多个字符
  • (?=[^<>]*>)-紧挨着右侧,除了<>以及>字符之外,必须有零个或多个字符。

相关问题