我希望有人能帮助我编写一个与搜索词组中的单词匹配的c ++正则表达式,并为学习目的一点一点地解释它。
我需要的是一个匹配" "
内的字符串的正则结构,如"Hello you all"
,以及*
开头/结尾的单个字,例如*ack
/ overfl*
对于引用部分我有\"[\^\\s][\^\"]*\"
但我无法弄清楚通配符(*
)部分,以及我应该如何将它与引用正则表达式结合起来。
答案 0 :(得分:0)
只要没有引用嵌套(一般情况下嵌套是正则表达式不好的地方):
"(?:(?<=\\)"|[^"])*"|\*[^\s]+|[^\s]+\*
这个正则表达式允许转义双引号('\"'
),但是,如果你需要的话。并且匹配包括封闭的双引号。
此正则表达式匹配:
"A string in quotes, possibly containing \"escaped quotes\""
*a_search_word_beginning_with_a_star
a_search_word_ending_with_a_star*
*a_search_word_enclosed_in_stars*
请注意它将会破坏这样的字符串:
A broken \"string "with the quotes all \"mangled up\""
如果您希望(阅读:不能完全排除的可能性)来获取这些,请不要使用正则表达式,而是编写一个小的引用感知解析器。对于一次性搜索和替换保证格式的活动或输入,正则表达式可以使用。
为了验证/解析用户输入,不能使用。这就是我推荐解析器的地方。了解差异是关键。
答案 1 :(得分:0)
试试这个正则表达式:
(?:\*?\w+\*?|"(?:[^\x5C"]+|\x5C(?:\x5C\x5C)*")*")+
为了便于阅读,我将反斜杠字符替换为\x5C
。
表达式"(?:[^\x5C"]+|\x5C(?:\x5C\x5C)*")*"
也会匹配"foo \"bar\""
和其他正确的转义引号序列(但只有"
可能会被转义)。
所以foo* bar *baz *quux* "foo \"bar\""
应该分成:
foo*
bar
*baz
*quux*
"foo \"bar\""
如果您不想在上面的示例中匹配bar
,请使用此选项:
(?:\*\w+|\w+\*|"(?:[^\x5C"]+|\x5C(?:\x5C\x5C)*")*")+