2011-07-08 548 views
0

我发现围绕正则表达式中的前缀和后缀查找有点困难。我正在练习,并希望做到以下几点:Java正则表达式前缀后缀

给出一个字符串:“詹姆斯很好”。我希望能够按顺序匹配最大子字符串,例如,如果文本是“James”或“James is”或“James is good”,则匹配。因此,如果我有以下文字:“詹姆斯詹姆斯是詹姆斯”,我应该能够抓住“詹姆斯”而不仅仅是“詹姆斯”。 Simalrly“是詹姆斯詹姆斯是好詹姆斯”应该给我“詹姆斯是好”,而不是“詹姆斯”,因为它是坏的,并不是最大的

我想我可以使用后缀不存在(?!),匹配,只说“詹姆斯”如果“好”不存在等等,但我不确定是否理解了正确匹配前缀和后缀的概念。

在这种情况下的任何澄清或帮助将是伟大的。我标记了java,因为我熟悉了java的正则表达式api。

回答

0

我不确定,但我想你是在谈论看后面,并向前看断言。

一个断言长度为零,并匹配空字符串,所以没有字符与此构造相匹配。 (如果您使用的否定版本与否),你可以使用它们来匹配模式,只有当它是之前或之后有一定其他模式

您可以在这里获得更多的细节上regular-expressions.info

Perlretut是关于Perl,但它在Java中的工作方式类似。

1

我认为你的意思是你想捕捉“詹姆斯是”和下一个词如果存在。在这种情况下,你应该说"(James is(?:\s+\w+)?)"。很显然,在Java代码中,反斜杠必须重复。

我还没有运行这个正则表达式,但我相信它可以给你一个很好的开始调试。

+0

感谢您的快速回复!是的,但只有在“好”的情况下我才会捕获下一个词。否则,我想要“詹姆斯是”。与“詹姆斯”和“是”一样的东西。如果下一个单词不是“是”,我想捕捉“詹姆斯”。否则,我想要“詹姆斯是”。 – Panther

+0

在这种情况下,说“(詹姆斯是(?:\ s + good)?)” – AlexR