簡體   English   中英

如何使用正則表達式來匹配不包含特殊字符(&,\\,<,>,|,)的字符串,除非它們以反斜杠進行

[英]How to use regex to match strings that don't contain special characters (&, \, <, >, |, ) unless they are proceeded by a backslash

現在我正在使用[^ \\\\&<>|\\t\\n]+ ,它將匹配任何包含非空格字符的字符串,\\,&,<,>,|,\\ t,\\ n。 我想要做的是允許你轉義任何這些特殊字符,以便(例如)\\ <或\\&仍然允許我的整個字符串匹配。

應該匹配:

abcdefghijk abcdef\\&hdehud\\<jdow\\\\

不應該匹配:

abcdefhfh&kdjeid abcdjedje\\idwjdj

我發現這個模式([^\\[]|(?<=\\\\)\\[)+只對“[”字符做同樣的事情。 我無法弄清楚如何擴展它以適用於任何其他角色。

知道如何為反斜杠前面的字符設置例外嗎?

如果它有所不同,我在Flex和C ++中使用它來為shell標記字符串。 我相信我需要使用負面的后衛,但我不知道如何使用多個角色。

你已經回答了大部分問題:

你正在使用否定集[^ \\\\&<>|\\t\\n]來指定哪些字符可能不存在,所以你所要做的就是使用相同的集合,而沒有以\\前面的否定來逃避字符。 這可以讓你得到這個\\\\[ \\\\&<>|\\t\\n] ,它可以被讀作“一個\\后面跟着集合中的任何一個項目”現在結合這兩個你就得到了([^ \\\\&<>|\\t\\n]|\\\\[ \\\\&<>|\\t\\n])+

要打破它:

以下一項或多項: [^ \\\\&<>|\\t\\n]\\\\[ \\\\&<>|\\t\\n]

像往常一樣,在這里使用正則表達式是過度的。 這是一個簡單的文本搜索:

const std::string target = "\\&<>|";
std::string iter = str.find_first_of(target);
while (iter != str.end()) {
    if (*iter != '\\')
        found_bad_character(*iter);
    iter = str.find_first_of(target, std::next(iter));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM