基本上我需要一个正则表达式,如果字符串是一个单词(\ w +),它将返回true,如果它是单词word1或word2则除外.
我尝试了很多东西,但不要以为我甚至都很接近.救命!
Tim*_*ker 23
^(?!(?:word1|word2)$)\w+$
Run Code Online (Sandbox Code Playgroud)
应该做你需要的.
(?!...)是一个负前瞻断言,确保无法匹配当前位置的封闭表达式.
要匹配由一个或多个字母、数字或下划线组成的序列的任何单词(因为您提到您想要使用 匹配所有单词\w+) ,除了 word1并且word2您可以使用带有单词边界的负向前看解决方案:\b
\b(?!(?:word1|word2)\b)\w+
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示。请注意,在 PostgreSQL 正则表达式中,\b必须替换为\y.
以下是一些快速代码片段:
"""\b(?!(?:word1|word2)\b)\w+""".r.findAllIn(text).toList(参见演示)text.findAll(/\b(?!(?:word1|word2)\b)\w+/)(参见演示)Regex("""\b(?!(?:word1|word2)\b)\w+""").findAll(text).map{it.value}.toList()(参见演示)select-string -Path $input_path -Pattern '\b(?!(?:word1|word2)\b)\w+' -AllMatches | % { $_.Matches } | % { $_.Value } > $output_filestd::regex rx(R"(\b(?!(?:word1|word2)\b)\w+)"); std::string s = "Extract all words but word1 and word2."; std::vector<std::string> results(std::sregex_token_iterator(s.begin(), s.end(), rx), std::sregex_token_iterator());(参见演示)Dim matches() As String = Regex.Matches(text, "\b(?!(?:word1|word2)\b)\w+").Cast(Of Match)().Select(Function(m) m.Value).ToArray()extension String {
func matches(regex: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex, options: [])
let nsString = self as NSString
let results = regex.matches(in: self, options: [], range: NSRange(location: 0, length: nsString.length))
return results.map { nsString.substring(with: $0.range) }
} catch let error {
print("invalid regex: \(error.localizedDescription)")
return []
}
}
}
print("Extract all words but word1 and word2.".matches(regex: #"\b(?!(?:word1|word2)\b)\w+"#))text.match(/\b(?!(?:word1|word2)\b)\w+/g)(参见演示)regmatches(text, gregexpr("(*UCP)\\b(?!(?:word1|word2)\\b)\\w+", text, perl=TRUE)) (参见演示)或stringr::str_extract_all(text, "\\b(?!(?:word1|word2)\\b)\\w+")(参见演示)text.scan(/\b(?!(?:word1|word2)\b)\w+/)(参见演示)Pattern p = Pattern.compile("(?U)\\b(?!(?:word1|word2)\\b)\\w+"); Matcher m = p.matcher(text); List<String> res = new ArrayList<>(); while(m.find()) { res.add(m.group()); } (参见演示)if (preg_match_all('~\b(?!(?:word1|word2)\b)\w+~u', $text, $matches)) { print_r($matches[0]); } (参见演示)re.findall(r"\b(?!(?:word1|word2)\b)\w+", text) (参见演示)Regex.Matches(text, @"\b(?!(?:word1|word2)\b)\w+").Cast<Match>().Select(x=>x.Value)(参见演示)grep -oP '\b(?!(?:word1|word2)\b)\w+' file(演示)REGEXP_MATCHES(col, '\y(?!(?:word1|word2)\y)\w+', 'g')(演示)@list = ($str =~ m/\b(?!(?:word1|word2)\b)(\w+)/g);(演示)| 归档时间: |
|
| 查看次数: |
13985 次 |
| 最近记录: |