【问题标题】:regex to match numbers within carriage return and line feed正则表达式匹配回车和换行中的数字
【发布时间】:2017-09-13 05:10:24
【问题描述】:

它匹配 \r\n 之间的所有内容。我只想匹配 \r\n 之间的数字并替换为“”。

regex: [^\r\n\d$\r\n]
Matching: 
     abc\r\n123\r\nabc\r\n
Doesnot match: 
     \r\n\r\n
     \r\nasaas\r\n

正则表达式表示以上所有内容都匹配。 这对于删除从套接字接收的数据包数据中的块长度很有用。我想删除分块数据包中的数据包长度并准备适当的 XML。

【问题讨论】:

  • 您应该在问题中直接包含所有相关信息。链接应该是补充的。
  • 因为你只有一个数字 - 它根本不应该匹配
  • 如果你正在实现分块传输模式,你真的应该使用已经为你完成它的库,例如HttpURLConnection、Apache HTTP 客户端等。
  • 使用正则表达式去除 HTTP 块长度是不够的,因为每个块有效负载后跟一个 CRLF。您也必须将它们剥离,但您需要块长度才能正确执行,因此您不会删除块有效负载内的 CRLF。不要使用正则表达式来处理 HTTP 数据。
  • 使用这个regex101.com

标签: c++ regex boost


【解决方案1】:

从纯正则表达式的角度来单独隔离行上的数字:我想你想要这个:

(\n\d+\n)|(^\d+\n)|(\n\d+$)

作为 C++ 字符串:"(\\n\\d+\\n)|(^\\d+\\n)|(\\n\\d+$)" 或简单的 R"((\n\d+\n)|(^\d+\n)|(\n\d+$))"

更新。正如其他人所指出的,正则表达式可能不是解析 HTTP 流的最合适的工具。但从正则表达式的角度来看,我会坚持这个答案。

【讨论】:

  • 等等。正则表达式库是否无条件地对待行尾特殊?原因 #42953 远离正则表达式(FWIW,I don't think that's true
  • 如果没有[]^\d 也算吗?
猜你喜欢
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
相关资源
最近更新 更多