【问题标题】:Regex for text inside double quotes双引号内文本的正则表达式
【发布时间】:2014-09-14 19:19:51
【问题描述】:

我正在尝试匹配这些字符串:

" ... "双引号内的文字

' ... '单引号内的文字

" ' "里面可以有撇号

" \" "可以有转义的双引号

但不是这些:

' " '单引号内不是双引号

" " "双引号内不是双引号

'''单引号里面的单引号——单引号里面只能包含文字

我想出了以下正则表达式:

['"](?(["])[^\"-"][\w])['"]

但它不起作用。

【问题讨论】:

  • 提供样本输入数据和您的预期匹配
  • 单引号字符串中的撇号怎么样?
  • 为什么单引号中没有双引号?这是单引号的主要用法之一,因此您可以使用其他类型的引号而无需转义。

标签: .net regex


【解决方案1】:

通常将引号与 C 风格语言中的转义匹配(以及在 JS 中使用单引号),您可以使用:

"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'

【讨论】:

  • 它匹配这个并且它不应该:'"'
【解决方案2】:

你可以使用这样的东西:

"(?:[^"\\]|\\.)*?"|'(?:[^\\"']|\\.)*?'

我已经按照你的说法,但我想知道(为什么单引号内没有双引号?我不允许单引号内有单引号,尽管你什么也没说)。

不管怎样,这里是an example

【讨论】:

  • 它不适用于第二种情况,即。单引号内的文字
  • 我改变了转义,因为我对它很粗心,但甚至在它与单引号一起工作之前。看例子。
  • 它似乎可以工作,但我不明白为什么如果允许的标记是\",那么正则表达式是:"\\所以反过来呢?
  • 我猜你说的是[^"\\]?我认为您误解了它的含义(P.S.我链接到的示例很好地解释了这一点)。 [^] 构造表示该组内没有任何字符,因此[^"\\] 表示除"` (since you need to escape backslashes). you then have that or (|) \\"` 0 次或更多次之外的任何字符,这意味着您可以拥有@987654329 @ 但不是 " 在括号内。
  • 好的,当然。所以我们正在看的是(?:[^\\"]|\\.) (?:) 只是意味着非捕获组,所以我们可以忽略它(它将事物分组在一起,然后我们将 0 或更多次运算符应用于该分组)。分组由两部分之一组成。它将匹配 [^\\"] 或任何不是 "\ 的字符。或者它将匹配\\.,这是一个\ ,后跟任何字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2011-05-01
  • 2016-08-20
相关资源
最近更新 更多