0

举个例子:

string1 = "aaxadfxasdf"

string2 = "asdfxadf"

string3 = "sadfas"

我需要一个匹配 x 的模式,以便它只为 string2 返回 x 的匹配。

注意:出于这个问题的目的,我必须使用 java regex。另外,我无权访问代码,所以我不能简单地检查 java regex 对象返回的匹配数。


大家好,

感谢您的回复,其中一些确实回答了我的问题。我的例子并不像我需要的那样具体。因此,让我将这个怪癖添加到组合中:

如果我匹配多个字符怎么办?

string4 = "This is a sentence!"
string5 = "This is just another sentence with some repetition in it. This is a   sentence"
string6 = "this is"

在这种情况下,我只想匹配“句子”,只要它只出现在字符串中一次。

此外,虽然示例中没有表示,但我需要能够跨行搜索。

4

4 回答 4

4
^[a-wy-z]+x[a-wy-z]+$

我不确定您是否只期待字母,或者x您想要匹配的前后是否可能包含符号和数字。如果是这样,请使用[^x]代替[a-wy-z],如下所示:

^[^x]+x[^x]+$

如果您还想自己匹配x,请将+符号替换为*

^[a-wy-z]*x[a-wy-z]*$
于 2012-05-03T20:05:14.107 回答
4
^[^x]*x[^x]*$

其中第一个 ^ 是行首($ 是行尾),但另一个 ^ 表示字符集的补码

于 2012-05-03T22:37:18.040 回答
1

您可以使用有限状态自动机来完成,因此您肯定可以使用正则表达式来完成。

(all the chars except x)*x(all the chars except x)*
于 2012-05-03T20:06:44.223 回答
1

这将匹配任何被单词“asdf”和“adf”包围的字符串(它是贪婪的)。

(?=asdf).+(?<=adf)

非贪婪:

(?=asdf)((?<!adf).)+(?<=adf)

有更严格的界限:

^(?=asdf)((?<!adf).)+(?<=adf)$
于 2012-05-03T20:10:01.647 回答