这个正则表达式是什么意思\ w +(?= @)。我试图了解这个表达式如何从AD中提取用户,目前它在特殊字符之前省略了所有字符。例如:Viny.Trucker只会导致.Truck。我希望提取全名Viny.Trucker。 非常感谢任何帮助。
答案 0 :(得分:1)
这意味着找到“任意数量的单词字符(az,AZ,0-9和_)后紧跟@符号。@符号不会包含在匹配的字符中。如果要包含' “。在表达式中的字符,你可以尝试(\ w |。)+(?= @)
答案 1 :(得分:0)
试试这个:http://www.regexr.com/当你将鼠标悬停在字符上时,会有非常好的解释。 这是你的正则表达式:http://www.regexr.com/38ndp
答案 2 :(得分:0)
它匹配@ -character之前的字符。
\w+ Match at least one word-character, i.e. letters, numbers and underscores.
(?=@) Match an @-character without including it in the match.
答案 3 :(得分:0)
Jan AAgaard是对的,它匹配@
之前的所有单词字符。
\w+ Matches ones or more word-chracters.
(?=@) This is called a positive-lookahead. It means require the following to come after the characters, but don't include that in the match.
现在,您似乎希望在@
之前匹配每个字符,简单的方法是
[^@]+(?=@)
如果你知道一行中总会有@
,你甚至可以使用
[^@]+
然后参加第一场比赛
如果在@
之前总是允许一组特定的字符,您甚至可以在字符类中指定它们:简单地将它们全部放在方括号中,例如:
[a-zA-Z0-9._]
答案 4 :(得分:0)
正在搜索any character, digit or underscore
,然后搜索 @
\w+(?=@)
Match a single character that is a “word character” (letters, digits, and underscores) «\w+»
Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
Assert that the regex below can be matched, starting at this position (positive lookahead) «(?=@)»
Match the character “@” literally «@»
正面和负面的前瞻
如果你不想匹配某些东西,那么否定的先行是必不可少的 其次是别的东西。在解释字符类时,这个 教程解释了为什么你不能使用否定的字符类来 匹配一个q后面没有你。负向前瞻提供了 解决方案:q(?!u)。负前瞻构造是一对 括号,左括号后跟问号 还有一个感叹号。在前瞻中,我们有微不足道的 正则表达式。
积极前瞻的作用是一样的。 q(?= u)匹配q 接下来是你,没有让你成为比赛的一部分。积极的 lookahead构造是一对括号,带有开头 括号后跟一个问号和一个等号。您可以 在前瞻中使用任何正则表达式(但不是lookbehind, 如下所述)。可以在里面使用任何有效的正则表达式 前瞻。如果它包含捕获组,那么这些组将 正常捕获,反向引用甚至可以正常工作 在前瞻之外。 (唯一的例外是Tcl,它会对待所有人 在前瞻中的群体是非捕获的。)前瞻本身不是 一个捕获组。它不包括在编号计数中 反向引用。如果你想存储正则表达式的匹配 一个先行者,你必须在正则表达式周围放置捕获括号 在前瞻之内,像这样:(?=(正则表达式))。另一种方式 不会起作用,因为前瞻已经废弃了 捕获组存储匹配时的正则表达式匹配。