我在看似简单的正则表达式捕获方面遇到了麻烦。我正在使用AutoIt的stringRegExp()函数。
源字符串是:
1 U:\some text here\more text over here\06-17-2011\Folder 2\161804\abc9831\xyz10007569.JPG
我正在尝试捕获“abc9831”和“161804”。 “abc”部分可以是“abc”,“def”或“ghi”,后跟一串数字。 “161804”可以替换为任何文本字符串。一切都是不区分大小写的。我目前正在使用以下正则表达式模式:
(?i)\\\\.+\\\\((abc\d+)|(def\d+)|(ghi\d+))
但它只捕获了“abc9831”部分。如何获取前面的文本字符串?
答案 0 :(得分:0)
(?i)\\\\(.+\\\\(abc\d+)|(def\d+)|(ghi\d+))
如果你想把它全部放在一个字符串中(中间有一个\
),应该可以做到这一点。
如果您想要两个单独的捕获:
(?i)\\\\(.+)\\\\((abc\d+)|(def\d+)|(ghi\d+))
答案 1 :(得分:0)
编辑:新版本......
原始正则表达式为\b(\d+)\\((?:abc|def|ghi)\d+)
。转义字符串为\\b(\\d+)\\\\((?:abc|def|ghi)\\d+)
答案 2 :(得分:0)
当在AutoIt的StringRegExp()
函数中使用下面的正则表达式时(使用标志“1”返回匹配数组),它返回161804\abc9831
。这是你想要回归的吗?
.*\\([^\\]+\\[a-z]{3}\d+)\\.*
以下是您可以自己运行的示例:
#include <Array.au3>
$string = 'U:\some text here\more text over here\06-17-2011\Folder 2\161804\abc9831\xyz10007569.JPG'
$capture = StringRegExp($string,'.*\\([^\\]+\\[a-z]{3}\d+)\\.*',1)
_ArrayDisplay($capture)