2009-02-27 103 views
1

我希望有人可以帮我写C++的正则表达式,在一个searchphrase相匹配的话,以及由位解释为位学习的目的。正则表达式来拆分searchphrase

我需要的是相匹配的开始/与**ack/overfl*结束内" ""Hello you all"字符串,和单字正则表达式。

对于报价部分,我有\"[\^\\s][\^\"]*\",但我无法弄清楚通配符(*)部分,以及如何将其与报价正则表达式组合。

+0

“我知道,我将使用正则表达式。”现在他们有两个问题... – 2009-02-27 15:33:03

+0

“我知道,我会引用一个关于正则表达式的引用。”现在作者有三个问题,因为没有人告诉他为什么不使用正则表达式! (没有个人亚当,这个报价被IMO过度使用。) – 2009-02-27 15:42:55

回答

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)*")*")+ 
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\""

如果你希望(阅读:不能完全排除这种可能性)来获取这些,请不要使用正则表达式,但写一个小的报价感知的解析器。对于一次性搜索并以格式替换活动或输入格式,正则表达式可以使用。

对于验证/解析用户输入,不能使用。这就是我推荐解析器的地方。知道差异是关键。