举个例子:
string1 = "aaxadfxasdf"
string2 = "asdfxadf"
string3 = "sadfas"
我需要一个匹配x的模式,以便它仅为string2返回x的匹配。
注意:出于这个问题的目的,我必须使用java正则表达式。此外,我无法访问代码,所以我不能简单地检查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"
在这种情况下,我只想在字符串中出现一次时才匹配“句子”。
此外,虽然未在示例中表示,但我需要能够跨行搜索。
答案 0 :(得分:4)
^[a-wy-z]+x[a-wy-z]+$
我不确定您是否只是期待字母,或者您想要匹配的x
之前和之后是否包含符号和数字。如果是,请使用[^x]
代替[a-wy-z]
,如下所示:
^[^x]+x[^x]+$
如果您还希望自己匹配x
,请将+
符号替换为*
,如下所示:
^[a-wy-z]*x[a-wy-z]*$
答案 1 :(得分:4)
^[^x]*x[^x]*$
其中第一个^是行的开头($是结尾),但另一个^表示字符集的补码
答案 2 :(得分:1)
你可以使用有限状态自动机来完成它,因此你可以使用正则表达式来完成它。
(all the chars except x)*x(all the chars except x)*
答案 3 :(得分:1)
这将匹配由'asdf'和'adf'(它是贪婪的)所包围的任何字符串。
(?=asdf).+(?<=adf)
非贪婪:
(?=asdf)((?<!adf).)+(?<=adf)
边界更严格:
^(?=asdf)((?<!adf).)+(?<=adf)$