【问题标题】:add a string in regex pattern在正则表达式模式中添加一个字符串
【发布时间】:2015-05-02 13:02:09
【问题描述】:

任何将子字符串(在本例中为 ;[^;]*)插入到正则表达式模式中的想法,该模式在特定位置分隔 ;(在我的情况下添加第 4 个字段,其中总是有 4 个字段)。 问题是“字段”中的值是正则表达式,而字符 ; 可以作为模式存在(如在类中或转义字符中)而不是分隔符。

它在 AIX 上,因此没有可用的 GNU 工具(posix sed 或 awk)。

可能的字符串示例和预期结果

lazy;dog;are;running
-> lazy;dog;are;[^;]*;running

[^;]*;dog;are;[^;]*
-> [^;]*;dog;are;[^;]*;[^;]*

[^,;:0-9]*;dog;are;\;running
-> [^,;:0-9]*;dog;are;[^;]*;\;running

我尝试基于第一个字符串的sed 's/;[^;]*$/[^;]*;&/',但由于缺少反向引用值,无法针对其他特殊情况在 sed 上构建修改 (我认为 perl 或者 awk 可以避免大量批处理/sed

【问题讨论】:

  • 所以您不想计算 [] 中存在的分号?
  • 对,也不是 ; in \; 出于同样的原因

标签: perl awk sed


【解决方案1】:

通过 Perl。

$ perl -pe 's/(?<!\\);((?:\[[^\]]*\]|\\;|[^;])+)$/;[^;]*;\1/g' file
lazy;dog;are;[^;]*;running
[^;]*;dog;are;[^;]*;[^;]*
[^,;:0-9]*;dog;are;[^;]*;\;running

REGEX Demo

【讨论】:

  • 看起来很完美 :-) perl 可以使用反向引用。谢谢
猜你喜欢
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多