一些特殊正则元字符说明
:
1 . *? 和 +? 和 {n , } ? 懒惰匹配
1.1 非懒惰 ↓
echo " ab2c121a " | perl - ne ' print $1 if /(.*)"d/; ' # print ab2c12
1.2 懒惰 ↓
echo " ab2c121a " | perl - ne ' print $1 if /(.*?)"d/; ' # print ab
2 . 回溯引用和前后查找 :
2.1 向前查找 ( ?=.. ) ↓
echo " ab2c121a " | perl - ne ' print $1 if /(.*?)(?=2)/; ' # print ab
2.2 向后查找 ( ?<=.. ) ↓
echo " ab2c121a " | perl - ne ' print $1 if /(?<=2)(.*)(?=2)/; ' # print c1
2.3 负向 - 前 / 后 查找 ( ?!.. ) ( ?<!.. )
# 不能匹配 .. ↓
echo " ab2c121a " | perl - ne ' print $1 if /(?<!2)(c.*)/; ' # print 无
echo " ab2c121a " | perl - ne ' print $1 if /(?<!3)(c.*)/; ' # print c121a
2.4 条件 ? () = if ? () | = if else
# ?() 例如 <p> </p> 必须同时出现 ↓ ↓
echo " <p>xx</p> " | perl - ne ' print $2 if /(<p>)?("w*)(?(1)<"/p>)/ ' # print xx
echo " <p>xx " | perl - ne ' print $2,""n" if /(<p>)?("w*)(?(1)<"/p>)/ ' # print 空
echo " xx " | perl - ne ' print $2 if /(<p>)?("w*)(?(1)<"/p>)/ ' # print xx
# ?()| 例如 还是上面的,
# 当 有<p> 可以接</p> 也可以接 数字结尾 ↓
echo " <p>xx1</p> " | perl - ne ' print $2 if /(<p>)?("w*)(?(1)<"/p>|"d)/ ' # print xx1
1 . *? 和 +? 和 {n , } ? 懒惰匹配
1.1 非懒惰 ↓
echo " ab2c121a " | perl - ne ' print $1 if /(.*)"d/; ' # print ab2c12
1.2 懒惰 ↓
echo " ab2c121a " | perl - ne ' print $1 if /(.*?)"d/; ' # print ab
2 . 回溯引用和前后查找 :
2.1 向前查找 ( ?=.. ) ↓
echo " ab2c121a " | perl - ne ' print $1 if /(.*?)(?=2)/; ' # print ab
2.2 向后查找 ( ?<=.. ) ↓
echo " ab2c121a " | perl - ne ' print $1 if /(?<=2)(.*)(?=2)/; ' # print c1
2.3 负向 - 前 / 后 查找 ( ?!.. ) ( ?<!.. )
# 不能匹配 .. ↓
echo " ab2c121a " | perl - ne ' print $1 if /(?<!2)(c.*)/; ' # print 无
echo " ab2c121a " | perl - ne ' print $1 if /(?<!3)(c.*)/; ' # print c121a
2.4 条件 ? () = if ? () | = if else
# ?() 例如 <p> </p> 必须同时出现 ↓ ↓
echo " <p>xx</p> " | perl - ne ' print $2 if /(<p>)?("w*)(?(1)<"/p>)/ ' # print xx
echo " <p>xx " | perl - ne ' print $2,""n" if /(<p>)?("w*)(?(1)<"/p>)/ ' # print 空
echo " xx " | perl - ne ' print $2 if /(<p>)?("w*)(?(1)<"/p>)/ ' # print xx
# ?()| 例如 还是上面的,
# 当 有<p> 可以接</p> 也可以接 数字结尾 ↓
echo " <p>xx1</p> " | perl - ne ' print $2 if /(<p>)?("w*)(?(1)<"/p>|"d)/ ' # print xx1
echo "<p>xx1"|perl -ne 'print $2 if /(<p>)?("w*)(?(1)<"/p>|"d)/' # print xx
本文转自博客园刘凯毅的博客,原文链接:部分高级正则特性 使用,如需转载请自行联系原博主。