使用java查找带正则表达式的子字符串

时间:2013-02-15 13:14:44

标签: java regex

我需要在一个句子中找到一个子字符串“Hello,叫我XXX。”。句子可能非常长,唯一有助于我确定名称的是,名称总是在"call me"+space+name"+dot。然而,句子也可能看起来像hello, call me. call me xxx.

Call me John. ⇒ John

Call me Call me John. ⇒ prohibited - confusing

Call me. Call me John. ⇒ John

Call me  Call me John. ⇒ John

Call me Peter .Call me John. ⇒ John

Call me Peter. Call me John. ⇒ prohibited - more then one name...

名称可以是除\ r,\ n,\ 0和点之外的任何字符序列。

如果有人能帮我定义正则表达式,我将不胜感激。 我想弄清楚两个多小时,但没有成功......

3 个答案:

答案 0 :(得分:2)

正则表达式应该适合你:

"(?<=call me )[^.]*"

答案 1 :(得分:1)

假设名称不能包含空格:

String string = "Call me Peter .Call me John.";
Matcher matcher = Pattern.compile ("Call me ([^\r\n\0\\. ]+)\\.").matcher (string);
if (matcher.find ())
{
    String name = matcher.group (1);
    if (matcher.find ()) throw new Exception ("Prohibited: too many matches!");
    System.out.println (name);
}
else throw new Exception ("Prohibited: no matches!");

答案 2 :(得分:0)

这样的事情: .*Call\ me\ (.[\w]+).? 检查它是否满足您在线的所有要求:http://www.rubular.com/