regex - 在正则表达式中,匹配字符串的结尾或特定字符

regex - 在正则表达式中,匹配字符串的结尾或特定字符

简而言之

内部的任何零宽度断言[...]都失去了零宽度断言的含义。[\b]不匹配单词边界(它匹配一个退格,或者,在 POSIX 中,\或者b),[$]匹配一个文字$字符,[^]或者是一个错误,或者,在 ECMAScript 正则表达式风格中,任何字符。与\z, \Z,\A锚点相同。

您可以使用以下任何模式解决问题:

[&?]list=([^&]*)

[&?]list=(.*?)(?=&|$)

[&?]list=(.*?)(?![^&])

如果您需要检查“绝对”、明确的字符串结束锚点,您需要记住这是各种正则表达式风格,它用不同的结构表示:

[&?]list=(.*?)(?=&|$) - OK for ECMA regex (JavaScript, default C++ `std::regex`)

[&?]list=(.*?)(?=&|\z) - OK for .NET, Go, Onigmo (Ruby), Perl, PCRE (PHP, base R), Boost, ICU (R `stringr`), Java/Andorid

[&?]list=(.*?)(?=&|\Z) - OK for Python

字符序列与单个字符或字符串结尾之间的匹配(当前场景)

该.*?([YOUR_SINGLE_CHAR_DELIMITER(S)]|$)模式(由 João Silva 建议)效率相当低,因为正则表达式引擎首先检查出现在惰性点模式右侧的模式,并且只有当它们不匹配时,它才会“扩展”惰性点模式。

在这些情况下,建议使用否定字符类(或POSIX 谈话中的括号表达式):

[&?]list=([^&]*)

见演示。细节

[&?]&- 匹配或匹配的正字符类?(注意字符类中字符/字符范围之间的关系是 OR 关系)

list=- 一个子字符串,字符序列

([^&]*)- 捕获组 #1:除 ( ) 之外的零个或多个 ( )*字符,尽可能多&[^&]

检查尾随单个字符分隔符的存在而不返回它或字符串的结尾

大多数正则表达式风格(包括从 ECMAScript 2018 开始的 JavaScript)支持环视,即仅在模式匹配或不匹配时才返回 true 或 false 的构造。在预期可能以相同字符开头和结尾的连续匹配时,它们至关重要(请参阅原始模式,它可能匹配以 开头和结尾的字符串&)。尽管在查询字符串中不应该出现这种情况,但这是一种常见的情况。

在这种情况下,您可以使用两种方法:

具有包含正字符类的交替的正前瞻:(?=[SINGLE_CHAR_DELIMITER(S)]|$)

只有负字符类的负前瞻:(?![^SINGLE_CHAR_DELIMITER(S)])

负前瞻解决方案效率更高一些,因为它不包含增加匹配过程复杂性的交替组。OP 解决方案看起来像

[&?]list=(.*?)(?=&|$)

或者

[&?]list=(.*?)(?![^&])

在这里查看这个正则表达式演示和另一个。

当然,如果尾随定界符是多字符序列,则只有肯定的前瞻解决方案才会起作用,因为[^yes]它不会否​​定字符序列,而是会否定类中的字符(即[^yes]匹配除y,e和之外的任何字符s)。

相关推荐

中国好声音报名费30万
365平台app下载手机版

中国好声音报名费30万

📅 07-14 👁️ 5679
权益一般包括什么 广义的权益概念包括
365bet在线体育投注网

权益一般包括什么 广义的权益概念包括

📅 07-03 👁️ 7892
如何在电脑上使用u盘
365平台app下载手机版

如何在电脑上使用u盘

📅 07-17 👁️ 5621
卡塔尔犯规:2022年世界杯建设背后的劳工问题
365平台app下载手机版

卡塔尔犯规:2022年世界杯建设背后的劳工问题

📅 07-24 👁️ 9882
普桑汽车二手车
365bet开户网址

普桑汽车二手车

📅 08-07 👁️ 8598
路由器刷机
365平台app下载手机版

路由器刷机

📅 07-11 👁️ 4891
世界滚动:深圳的手机厂商有哪些?深圳手机生产商推荐?
365平台app下载手机版

世界滚动:深圳的手机厂商有哪些?深圳手机生产商推荐?

📅 08-02 👁️ 3505
放置江湖人物经验获取攻略 游戏中快速升级的秘诀详解
365平台app下载手机版

放置江湖人物经验获取攻略 游戏中快速升级的秘诀详解

📅 07-07 👁️ 8737
FGO职阶克制关系一览
365bet在线体育投注网

FGO职阶克制关系一览

📅 07-13 👁️ 4774