我希望有人可以帮我写C++的正则表达式,在一个searchphrase相匹配的话,以及由位解释为位学习的目的。正则表达式来拆分searchphrase
我需要的是相匹配的开始/与*
像*ack
/overfl*
结束内" "
像"Hello you all"
字符串,和单字正则表达式。
对于报价部分,我有\"[\^\\s][\^\"]*\"
,但我无法弄清楚通配符(*
)部分,以及如何将其与报价正则表达式组合。
我希望有人可以帮我写C++的正则表达式,在一个searchphrase相匹配的话,以及由位解释为位学习的目的。正则表达式来拆分searchphrase
我需要的是相匹配的开始/与*
像*ack
/overfl*
结束内" "
像"Hello you all"
字符串,和单字正则表达式。
对于报价部分,我有\"[\^\\s][\^\"]*\"
,但我无法弄清楚通配符(*
)部分,以及如何将其与报价正则表达式组合。
试试这个正则表达式:
(?:\*?\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)*")*")+
只要没有报价嵌套(一般筑巢的东西正则表达式是坏的):
"(?:(?<=\\)"|[^"])*"|\*[^\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\""
如果你希望(阅读:不能完全排除这种可能性)来获取这些,请不要使用正则表达式,但写一个小的报价感知的解析器。对于一次性搜索并以格式替换活动或输入格式,正则表达式可以使用。
对于验证/解析用户输入,不能使用。这就是我推荐解析器的地方。知道差异是关键。
“我知道,我将使用正则表达式。”现在他们有两个问题... – 2009-02-27 15:33:03
“我知道,我会引用一个关于正则表达式的引用。”现在作者有三个问题,因为没有人告诉他为什么不使用正则表达式! (没有个人亚当,这个报价被IMO过度使用。) – 2009-02-27 15:42:55