我正在寻找一种与所有内容匹配的模式,直到第一次出现特定字符,例如“;”。- 分号。
我这样写:
/^(.*);/
但是它实际上匹配所有内容(包括分号),直到最后一次出现分号为止。
\w+(?!([^]+;)|;)
但这不是为什么吗?.+(?!([^]+;)|;)
我正在寻找一种与所有内容匹配的模式,直到第一次出现特定字符,例如“;”。- 分号。
我这样写:
/^(.*);/
但是它实际上匹配所有内容(包括分号),直到最后一次出现分号为止。
\w+(?!([^]+;)|;)
但这不是为什么吗?.+(?!([^]+;)|;)
Answers:
你需要
/[^;]*/
该[^;]
是字符类,它匹配一切,但一个分号。
引用perlre
联机帮助页:
您可以通过在[]中包含一个字符列表来指定字符类,该字符列表将匹配列表中的任何字符。如果“ [”之后的第一个字符是“ ^”,则该类匹配列表中未包含的任何字符。
这在大多数正则表达式中都适用。
foo=bar;baz=bax;bab=baf
,bab=baf
即使没有;
我所需要的也匹配。不确定规格说明是否匹配目标符号之外的所有内容,为什么它仍然有效...
将;
/^(.*?);/
工作?
本?
是一个懒惰的经营者,所以正则表达式争夺尽可能少的匹配之前;
。
/^[^;]*/
[^;]说匹配除分号之外的任何东西。方括号是集合匹配运算符,从本质上讲,它匹配此字符集中的任何字符,^
开始时使其成为反匹配,因此匹配此集合中不存在的任何字符。
示范文本:
"this is a test sentence; to prove this regex; that is g;iven below"
例如,如果我们有上面的示例文本,则正则表达式/(.*?\;)/
将为您提供一切,直到第一次出现分号(;
)为止,包括分号:"this is a test sentence;"
;
char,因为它不是正则表达式的特殊字符。()
也不需要分组。您可以选择/.*?;/
?
字符使匹配变得懒惰(匹配次数越少越好)。考虑一下正则表达式在第一个分号之前匹配字符,然后它不再走了,因为它放弃了(懒惰;))
这对我非常有帮助,因为我试图弄清楚如何匹配xml标记中的所有字符(包括属性)。我遇到了“一切都匹配到最后”的问题:
/<simpleChoice.*>/
但能够通过以下方式解决此问题:
/<simpleChoice[^>]*>/
看完这篇文章后。谢谢大家
<!DOCTYPE>
标记中语法错误的xml文档。由于解析器无法处理它。
/^(.*?);/
应该也可以工作(称为non-greedy),但是使用给出的答案[^;]*
更好。