Regex 在正则表达式中,匹配字符串的结尾或特定字符
我有一根绳子。结尾是不同的,例如Regex 在正则表达式中,匹配字符串的结尾或特定字符,regex,pattern-matching,Regex,Pattern Matching,我有一根绳子。结尾是不同的,例如index.php?test=1&list=UL或index.php?list=UL&more=1。我要找的是&list= 如何匹配它,无论是在字符串的中间还是在结尾处?到目前为止,我已经得到了[&| \?]list=.*([&|$]),但是([&|$])部分实际上不起作用;我试图使用它来匹配&或字符串的结尾,但字符串的结尾部分不起作用,因此此模式匹配第二个示例,但不匹配第一个示例。使用: /(&|\?)list=.*?(&|$)/ 请注意,使用
index.php?test=1&list=UL
或index.php?list=UL&more=1
。我要找的是&list=
如何匹配它,无论是在字符串的中间还是在结尾处?到目前为止,我已经得到了[&| \?]list=.*([&|$])
,但是([&|$])
部分实际上不起作用;我试图使用它来匹配&
或字符串的结尾,但字符串的结尾部分不起作用,因此此模式匹配第二个示例,但不匹配第一个示例。使用:
/(&|\?)list=.*?(&|$)/
请注意,使用括号表达式时,其中的每个字符(例外情况除外)都将按字面解释。换句话说,
[&|$]
匹配字符&
,
和$
[…]
中的任何零宽度断言都失去了零宽度断言的含义[\b]
与单词边界不匹配(它匹配一个退格,或者在POSIX中,\
或b
),[$]
匹配一个文本$
字符,[^]
要么是一个错误,要么是任何字符,就像在ECMAScript正则表达式中一样。与\z
,\z
,\A
锚相同
您可以使用以下任一模式解决此问题:
[&?]list=([^&]*)
[&?]list=(.*?)(?=&|$)
[&?]list=(.*?)(?![^&])
如果您需要检查“绝对”的、明确的字符串结束锚点,您需要记住这是不同的正则表达式风格,它用不同的构造表示:
<代码> []?list =(.*)(?=和$)- ECMA正则表达式(OK),JOScript,默认C++(STD:::ReEXX)
[&?]list=(.*?(=&&|\z)-OK for.NET、Go、Onigom(Ruby)、Perl、PCRE(PHP、base R)、Boost、ICU(R`stringr`)、Java/android
[&?]list=(.*?(=&|\Z)-对Python来说可以
字符序列与单个字符或字符串结尾之间的匹配(当前场景)
*?([u SINGLE\u CHAR\u DELIMITER)]|$)
模式()效率很低,因为正则表达式引擎首先检查出现在惰性点模式右侧的模式,并且只有当它们不匹配时才会“扩展”惰性点模式
在这些情况下,建议使用(或POSIX talk中的括号表达式):
详细信息
-与[&?]
或&
匹配的正字符类(注意字符类中字符/字符范围之间的关系为或关系)?
-子字符串,字符序列list=
-捕获组#1:除([^&]*)
(&
)之外的零个或多个([^&]
)字符,尽可能多*
&
开始和结束的字符串),则它们非常重要。虽然查询字符串中不需要它,但这是一种常见的情况
在这种情况下,可以使用两种方法:
- 带有包含正字符类的替换项的正前瞻:
(?=[单字符分隔符]|$)
- 只有一个负数字符类的负数前瞻:
(?![^SINGLE\u CHAR\u DELIMITER)])
[&?]list=(.*?)(?=&|$)
或
见和
当然,如果尾随定界符是多字符序列,则只有正向前瞻解决方案会起作用,因为
[^yes]
不会否定字符序列,但类内的字符(即[^yes]
匹配任何字符,但y
、e
和s
)。谢谢;我不知道方括号中的“按字面解释”部分。非常有用!因此,要使用|分隔两个或多个字符,是否需要()
?是的,确实需要将(()
)备选字符分组。@DrazenBjelovuk您的意思可能是(将文本作为输出)。请看,每个解决方案都包含一个捕获组,用于捕获在返回匹配后通常作为第一个组获得的所需子匹配。@WiktorStribiżew事后看来,我的意思似乎是string.match(/Some.*?(\/|$)/)[0]代码>。不知道这一点的目的是什么虽然lol.@DrazenBjelovuk是的,惰性点匹配将匹配到后续子模式的最左边出现。这应该是公认的答案,imho,否定字符解决方案正是需要的,但更通用(即,可能适用于搜索类似问题的其他用户)。
[&?]list=(.*?)(?=&|$)
[&?]list=(.*?)(?![^&])