【问题标题】:regex find characters between " "正则表达式查找“​​”之间的字符
【发布时间】:2017-05-13 00:11:01
【问题描述】:

如何匹配两个指定字符之间的所有字符,比如" " -> 来自sdfsf " 12asdf " sdf

我只想得到12asdf

【问题讨论】:

  • 你希望得到什么?它不是返回前导空格吗?请向我们展示您正在使用的正则表达式并将您的示例结果放入代码块中。

标签: regex


【解决方案1】:

您可以使用以下模式获取" " 之间的所有内容,包括前导和尾随空格:

"(.*?)"

"([^"]*)"

如果您想捕获“ ”之间的所有内容,不包括前导和尾随空格,您可以这样做:

"\s*(.*?)\s*"

"\s*([^"]*)\s*"

【讨论】:

  • 同意。确保在“非贪婪”(与“贪婪”)表达式中查找任何你能找到的东西。如果你还不知道它应该是一本有趣的书。如果您知道其中的区别,它肯定会让您使用正则表达式的生活更轻松。
  • 通过我的测试,这些实际上并没有得到不包括引号的内部字符,就像问的问题一样。然而,这些也包括引号!
  • 就像其他人说的那样,这不能回答问题,它会得到带引号的文本。
【解决方案2】:

我建议你使用

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

这将仅匹配引号之间的内容(而不是引号本身),并且还可以正确处理字符串中的转义引号。

所以在"She said, \"Hi!\"" 中,它将匹配She said, \"Hi!\"

如果您使用的是 JavaScript 或 Ruby(您没有提及),因此无法使用后向搜索,请使用

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

并使用捕获组编号。 1.

【讨论】:

  • @Don:您能否提供非工作正则表达式的链接(点击保存正则表达式并发布该链接)?
【解决方案3】:

您可以使用preg_match(/"([^"]*)"/,$input,$matches);$matches[1] 会有你想要的。

【讨论】:

    【解决方案4】:
    [^"].*[^"]
    

    如果输入:“Elie”,就会给出Elie(注意:不带引号)

    【讨论】:

      猜你喜欢
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多