匹配字符串,如:
-TEXT-someMore-String
要获得-TEXT-
,我才知道这有效:
/-(.+?)-/ // -TEXT-
据我所知,?
将前面的标记视为可选项,如:
colou?r
匹配colour
和color
我最初使用正则表达式来获取-TEXT-
这样的部分:
/-(.+)-/
但它给了-TEXT-someMore-
。
添加?
如何停止正则表达式以正确获取-TEXT-
部分?因为它曾经使前面的令牌可选择不停止在某个点,如上例所示?
答案 0 :(得分:9)
正如你所说,?
有时意味着“零或一”,但在你的正则表达式中+?
是一个单位,意思是“一个或多个 - 并且最好尽可能少”。 (这与裸+
形成对比,这意味着“一个或多个 - 并且最好尽可能多”。)
正如the documentation所说:
但是,如果量词后跟一个问号, 然后它变得懒惰,而是匹配最小值 可能的次数,因此模式
/\*.*?\*/
用C评论做正确的事情。的意思 各种量词都没有改变,只是首选 比赛数量。不要混淆这种用法 问号用作量词本身。 因为它有两种用途,它有时会出现加倍,如 在\d??\d
中,按优先级匹配一个数字,但可以匹配两个if 这是模式其余部分匹配的唯一方式。
答案 1 :(得分:3)
或者,您可以使用 U ngreedy修饰符设置整个正则表达式,以便尽可能缩短搜索范围:
/-(.+)-/U
答案 2 :(得分:2)
?
,这意味着:从0到1的任何一个出现最重要的。
但是+
不是一个标记,而是一个量词。 {1,}的简写:1直到无穷无尽的外表。
A?在量词将其设置为非同意模式之后。如果处于贪婪模式,它会尽可能多地匹配字符串。如果非贪婪它尽可能少匹配
答案 3 :(得分:1)
另一个,也许你的正则表达式中的潜在错误是你尝试通过.+?
匹配许多任意字符。但是,你真正想要的可能是:"除了 - "之外的任何角色。您可以通过[^-]+
获得该信息。在这种情况下,如果您进行贪婪的比赛并不重要 - 重复的比赛将在您遇到第二个时立即终止" - &# 34;在你的字符串中。