正则表达式匹配特殊字符之间的单词

时间:2012-01-24 16:49:59

标签: regex

我需要在.)

之间传达这个词

我使用的是:\..*\)

但如果有多个.,我会收到第一个.),而不是最后一个.)

E.g:

abc.def.ghi.jkl.mymodname(Object sender, CompletedEventArgs e)

我得到了:

def.ghi.jkl.mymodname(Object sender, CompletedEventArgs e)

我想:

mymodname(Object sender, CompletedEventArgs e)

任何指针? 正如你所见,我是正则表达式的新手......

4 个答案:

答案 0 :(得分:3)

明确。如果您不希望在起始点和右括号之间有任何点,则可以指定:

\.[^.]*\)

[^.]是否定的character class,意思是“除了点之外的任何字符”。这样,在点之后只允许非点匹配。

如果您不希望前导点成为比赛的一部分(但希望它在比赛开始前出现),您可以使用lookbehind assertion

(?<=\.)[^.]*\)

这几乎适用于除JavaScript和Ruby之外的所有正则表达式引擎(直到版本1.8),两者都不支持lookbehind。

答案 1 :(得分:0)

尝试.[a-bA-B0-9,(]*)
我没有检查它,但我认为这样的工作 或者你也可以使用somthing

答案 2 :(得分:0)

PHP中的

$a='abc.def.ghi.jkl.mymodname(Object sender, CompletedEventArgs e)';
$p='/.*\.(.*?\))/';
preg_match($p,$a,$m);

现在查看$m[1]

其他语言类似

答案 3 :(得分:0)

听起来你真正想做的就是把所有东西都剥离到最后一个点。

在shell中:

    sed 's/.*\.//'

或在PHP中

    preg_replace('/^.*\./', '', $foo);

请注意方法中的杂散点。

def.ghi.jkl.mymodname(Object sender, "Some text.", CompletedEventArgs e)

为此,您可能需要:

    sed -r 's/.*\.([a-zA-Z]\()/\1/'

或类似的东西。