正则表达式否定无法正常工作

时间:2018-02-07 15:46:28

标签: java regex negation

我使用以下正则表达式:

^[^^DD(|    ]

有了这些数据:

jfklajf
^DD
     hjhkjk
DIOL(.D1)

表达式正确识别第一行(jfkl ...),但无法识别最后一行(DIOL ...)。我需要将这两行标识为与行开头的模式^DD(不匹配。

我做错了什么?

由于

5 个答案:

答案 0 :(得分:4)

根据你的评论你可以使用neg。与锚点结合前瞻:

    private List<TwitterFollowers> fetchResults2(Response<FollowersResponseModel> response) {
    FollowersResponseModel responseModel = response.body();
    return responseModel.getResults();
}

    private long fetchResults3(Response<FollowersResponseModel> response) {
    FollowersResponseModel responseModel = response.body();
    Log.e("lol",String.valueOf(responseModel.getNextCursor()));
    return responseModel.getNextCursor();
}

    private void loadTwitterFollowers() {
    MyTwitterApiClient myTwitterApiClient = new MyTwitterApiClient(twitterSession);
    do {
    myTwitterApiClient.getCustomTwitterService2().list(loggedUserTwitterId, cursor).enqueue(new retrofit2.Callback<FollowersResponseModel>() {
        @Override
        public void onResponse(Call<FollowersResponseModel> call, Response<FollowersResponseModel> response) {
            Log.e("onResponse",response.toString());
            twitterFollowers = fetchResults2(response);
            getActivity().setTitle(String.valueOf(twitterFollowers.size())+ " Followers");
            cursor = fetchResults3(response);

            Log.e("onResponse","twitterfollowers:"+twitterFollowers.size());
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onFailure(Call<FollowersResponseModel> call, Throwable t) {
            Log.e("onFailure",t.toString());
        }

    });
    }
    while (cursor != 0);
}

<小时/> 细分,这说:

^(?!\^DD|[ ]{4}).+

a demo on regex101.com。请注意,您需要在^ # match start of the line (?! # neg. lookahead \^DD # neither ^DD | # nor [ ]{4} # four spaces ) .+ # omit empty lines 中双重转义反斜杠。

答案 1 :(得分:1)

你需要一个消极的向前看。像这样的东西

^(?!((\^DD)|(    )))

请参阅https://regexr.com/3ke44

答案 2 :(得分:0)

也许:

Java

请参阅demo

您目前正在尝试匹配此列表中的任何字符:

(?!^\^DD|^\s+)^.+$ D(

使用组构造而不是字符列表(方括号),您将获得更多运气

答案 3 :(得分:0)

你的正则表达式是:作为句子不是以^,D,(,|或空格。

开头

[] construct是一个字符类,意味着它将匹配类中的任何一个字符,以^开始该类否定它并且意味着任何一个字符不在类。

正如其他答案所述,你应该寻找一个消极的前瞻,或者如果你喜欢复杂性,我理解你的尝试:

^([^^][^D]{2}[^(]|[^ ]{4})

答案 4 :(得分:0)

^((?![^DD|\s{4}]).)

解释

^...Start of the line
((?!Expression).)...not matching
[^DD|\s{4}]...Pattern 1 (^DD) or Pattern 2 (\s{4})
\s{4}...whitespaces 4 times