用java的正则表达式找到一个子字符串
问题描述:
我需要在句子“Hello,call me XXX。”中找到一个子字符串。这句话可能很长,唯一能帮助我确定名字的是,名字总是在fromat "call me"+space+name"+dot
。不过这句话也可以像hello, call me. call me xxx.
用java的正则表达式找到一个子字符串
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,点字符的任意序列。
我将不胜感激如果有人能帮我定义正则表达式。 我试图找出了两个多小时,但没有任何成功...
答
假设名不能包含空格:
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个和第4个句子是一样的,你期望不同的输出。歧义! – Juvanis 2013-02-15 13:17:36
这只是因为在这里stackoverflow格式不好...在第四句话应该有第一个“打电话给我”后两个空格...但是啊...我的坏..我应该写它以某种方式使其更清晰:) – Dworza 2013-02-15 13:20:46
为什么叫我叫我John.'被禁止?根据你的问题陈述,它应该没问题,名字叫'叫我约翰'。另外为什么'叫我彼得。给我约翰。'是不被禁止的?有两个匹配项:名字叫'彼得',名字叫'约翰'。如果名称不能包含空格,“Call me Call me John John”的问题是什么?这不是混淆,名字是'约翰'。 – 2013-02-15 13:20:50