繁体   English   中英

正则表达式问号

[英]Regex question mark

要匹配字符串,例如:

-TEXT-someMore-String

为了获得-TEXT- ,我开始知道这是有效的:

/-(.+?)-/ // -TEXT-

据我所知, ? 将前面的标记设为可选,如下所示:

colou?r匹配colourcolor

我最初使用正则表达式获取-TEXT-部分如下:

/-(.+)-/

但它给了-TEXT-someMore-

如何添加? 停止正则表达式以正确获取-TEXT-部分? 因为它曾经使前面的令牌可选择不在某些点停止,如上例所示?

如你所说, ? 有时意味着“零或一”,但在你的正则表达式+? 是一个单位,意思是“一个或多个 - 并且最好尽可能少”。 (这与裸+相反,这意味着“一个或多个 - 并且最好尽可能多”。)

正如文档所说:

但是,如果量词后跟一个问号,那么它就会变得懒惰,而是匹配可能的最小次数,因此模式/\\*.*?\\*/使用C注释做正确的事情。 各种量词的含义不会改变,只是匹配的首选数量。 不要混淆这种问号的使用与其本身作为量词的用途。 因为它有两个用途,它有时会出现加倍,如\\d??\\d ,它按优先级匹配一个数字,但如果这是模式其余部分匹配的唯一方式,则可以匹配两个。

或者,您可以使用U ngreedy修饰符设置整个正则表达式,以便尽可能缩短匹配:

/-(.+)-/U

? 在令牌是{0,1}的简写之前,这意味着:从最重要的0到1出现的任何东西。

+不是一种象征,而是一种量词。 {1,}的简写:1表达无穷无尽的外观。

一种 ? 在量词将其设置为非同意模式之后。 如果处于贪婪模式,它会尽可能多地匹配字符串。 如果非贪婪,它尽可能少匹配

另一个,也许你的正则表达式中的潜在错误是你尝试通过.+?匹配许多任意字符.+? 但是,你真正想要的可能是:“除了 - 之外的任何角色”。 你可以通过[^-]+得到它。在这种情况下,如果你做一个贪婪的比赛并不重要 - 一旦你遇到你的字符串中的第二个“ - ”,重复的匹配就会终止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM