MATLAB正则表达式⑧:动态表达式

  • 原创
  • |
  • 浏览:339
  • |
  • 更新:
  • |
  • 标签:MATLAB 

本经验介绍正则表达式中强大的动态表达式。在MATLAB中还可以用于执行MATLAB命令。

因为动态表达式往往与捕获(token)相关,预备知识为正则表达式的分组与捕获。

工具/原料

  • MATLAB R2016a

动态表达式语法

  1. 1

    (??expr) 把运行时确定的参数填入expr,然后将其解析为有效的正则表达式。

    如图,当表达式'(\d+)-((??\\w{$1}))'匹配序列'3-ABC'时:

    1. 首先(\d+)捕获到了3,然后遇到((??\\w{$1}))时,把$1替换为3

    2. 接着把'\\w{3}'解析为'\w{3}',然后把该片段替换到原序列

    3. 修改后匹配表达式为'(\d+)-(\w{3})'

    MATLAB正则表达式⑧:动态表达式
  2. 1
    相关内容非法爬取自百度经验
  3. 2

    (??@cmd) 执行MATLAB命令(cmd),并且把执行结果替换回正则表达式。

    如图,'(\d+\.\d+)≈(??@num2str(round(str2num($1))))'对前面的捕获使用系列函数取整转成字符串返回,效果如图,只有正确的约等于才被匹配到。

    MATLAB正则表达式⑧:动态表达式
  4. 3

    (?@cmd) 执行MATLAB命令但丢弃返回值,即返回值不会被填进正则表达式。

    如图,可用于调试,比如cmd部分使用disp显示一些内容。

    MATLAB正则表达式⑧:动态表达式
    END

动态表达式中的替换操作符

  1. 1

    $& 和 &0 表示当前匹配的整个内容(无需捕获)。

    效果如图。

    MATLAB正则表达式⑧:动态表达式
  2. 2

    $` (`在键盘左上角)表示当前匹配的前面的内容。

    $' (正则表达式中要写作$'')表示当前匹配后面的内容。

    效果如图。

    MATLAB正则表达式⑧:动态表达式
    MATLAB正则表达式⑧:动态表达式
  3. 3

    $N表示第N个捕获,$name表示名为name的捕获。

    效果如图。

    MATLAB正则表达式⑧:动态表达式
  4. 4

    ${cmd}表示执行MATLAB命令cmd的返回结果。

    如图,通过regexprep函数,把匹配内容变大写。

    MATLAB正则表达式⑧:动态表达式
    END

注意事项

  • (??expr)中的expr如果含有'\',需要写作'\\'才可被解析为'\'
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部
相关标签MATLAB