使用负面预测来匹配用户名的正则表达式?

时间:2015-07-22 12:10:36

标签: regex

我想使用正则表达式,这样我就会得到一个没有“。”的用户名匹配列表。出现在名称

帐户名称:sasha.grey //错误匹配

帐户名称:liz.hurley //错误匹配

帐户名称:sharonstone //匹配

试用正则表达式:

帐户名称:\ s +(。*?(?!。))

我在Regexbudy上尝试了这个匹配,结果在两种情况下都不起作用。

3 个答案:

答案 0 :(得分:1)

Account Name:\s+(?=[^.]*$).+$

您可以使用positive lookahead

尝试此操作

Account Name:\s+[^.]+$

答案 1 :(得分:1)

我认为vks回答是正确的。

另一种方法(完全避免前瞻)就是简单地匹配除.\n之外的所有内容(以及帐户名称中不应包含的任何字符

Account Name:\s+([^.\n]+)$

编辑:$标记行尾(文件的末尾 - 取决于风味)。您可能希望改为使用\n

也许你想知道你的表情在做什么:

\s+(.*?(?!.))

无效,因为您匹配

  • \s+空格(一个或多个出现)
  • .*?任何字符(一个或多个,但尽可能少)
  • (?!.)不是任何字符,\n

    如果您想忽略文字.,则必须将其撤消(因此它(?!\.)(?![.]) - 但是之后,它仍然无效说明是:非文字点的前瞻。在此示例中,您在每个示例中都将''.*?匹配

答案 2 :(得分:0)

使用否定先行断言。

Account Name:\s+(?!.*?\.).+

Account Name:\s+\w+$