正则表达式 - 排除一个字符

6
这里有一个例子:

s="abcd+subtext@example.com"

s.match(/+[^@]*/)

结果 => "+subtext"

问题是,我不想在结果中包含“+”。我希望结果为“subtext”,不要有“+”。
4个回答

5

您可以在正则表达式中使用括号来创建匹配组:

s="abcd+subtext@example.com"
s =~ /\+([^@]*)/ && $1
=> "subtext"

9
另一种语法是s[/\+([^@]*)/, 1] - mckeed
2
@mckeed,我不知道那个。非常好! - Wayne Conrad
谢谢大家!这些只适用于Ruby吗?另外,"&&"代表什么意思? - meow
@ming yeow,我使用过的每个正则表达式引擎都有匹配组。&&是短路逻辑与。在这种情况下,它的意思是“只有当s匹配正则表达式时才评估$1,否则返回nil”。 - Wayne Conrad

2
这对我有效:
\+([^@]+)

我喜欢使用Rubular来玩正则表达式。这能使调试变得更加容易。


2
你可以使用正向预测断言,我相信它的写法是这样的:

您可以使用正向预测断言,我相信其写法如下:

s.match(/(?<=\+)[^@]*/)
< p > < em > 编辑 :我刚注意到这是一个关于Ruby的问题,我不知道这个功能是否在Ruby中(我自己不是Ruby程序员)。 如果是,您可以使用它; 如果不是...我会删除这个。

1

我不是很熟悉Ruby,但如果你在想要匹配的部分周围添加捕获符号,就应该能够运行。例如:\+([^@]*)

你可以通过Rubular测试这些功能。这个具体匹配可以在这里找到:http://www.rubular.com/r/pqFza9jlmX


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接