首页 > 解决方案 > 正则表达式匹配,直到找到带有或不带有引号的冒号

问题描述

我正在寻找一个正则表达式来实现以下目标:

当我的输入是 root:Folder1:fname我想得到fname

以及当输入字符串root:Folder1:'fname'再次获取时fname (没有引号!)

因为前者[^:?]*$似乎完成了工作,但我找不到一个匹配这两种情况的正则表达式。

是否可以使用单个正则表达式来做到这一点?试图用条件正则表达式来实现它,但我做不到。

欢迎任何其他提示/解决方案。

谢谢你。

编辑:路径的格式不固定,引号可能出现在别处(例如 root:'Folder with spaces1':fname 或 root:'Folder with spaces1':'fname')。我猜的解决方案是向后搜索,因为我们要捕获的文件名总是最后一个冒号之后。

标签: regexpcre

解决方案


当您标记 pcre 时,您还可以使用分支重置组在单引号之间或不在单引号之间获取组 1。

^.*:(?|'(\w+)'|(\w+))$
  • ^字符串的开始
  • .*:匹配到最后:
  • (?|分支重置组
    • '(\w+)'在单引号之间 捕获 1+ 个单词字符|(\w+)捕获 1+ 个单词字符
  • )关闭分支重置组
  • $字符串结束

正则表达式演示


推荐阅读