理解正则表达式

时间:2014-04-16 10:18:21

标签: regex

这个正则表达式是什么意思\ w +(?= @)。我试图了解这个表达式如何从AD中提取用户,目前它在特殊字符之前省略了所有字符。例如:Viny.Trucker只会导致.Truck。我希望提取全名Viny.Trucker。 非常感谢任何帮助。

5 个答案:

答案 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,它会对待所有人   在前瞻中的群体是非捕获的。)前瞻本身不是   一个捕获组。它不包括在编号计数中   反向引用。如果你想存储正则表达式的匹配   一个先行者,你必须在正则表达式周围放置捕获括号   在前瞻之内,像这样:(?=(正则表达式))。另一种方式   不会起作用,因为前瞻已经废弃了   捕获组存储匹配时的正则表达式匹配。

http://www.regular-expressions.info/lookaround.html