我正在尝试创建一个正则表达式,它具有多个由 |
(OR) 分隔的条件。我想使用捕获组,但无法充分发挥作用。
3 个示例字符串:
--- {source-charset: '', encoding-error-limit: '', class: stat-direct, directory: \\\myserver\C\FOLDER\SUB_FOLDER}
--- {odbc-connect-string-extras: '', server: hello.sample.com, dbname: X_DB, port: '80', class: hello, username: USERX}
--- {cleaning: 'no', filename: //myserver/D/FOLDER/SUB_FOLDER/File name.xlsx, dataRefreshTime: '', interpretationMode: '0'}
对于每个示例字符串,我希望正则表达式返回:
\\\myserver\C\FOLDER\SUB_FOLDER
X_DB
//myserver/D/FOLDER/SUB_FOLDER/File name.xlsx
基本上是 directory:
、dbname:
或 filename:
之后并以 结尾的值其中有两个,
,
。
我已经设法使用 OR 语句来获取三个条件。 正则表达式提取
'directory: [^}]+|dbname: [^,]+|filename: [^,]+'
返回:
directory: \\\myserver\C\FOLDER\SUB_FOLDER}
dbname: X__DB,
filename: //myserver/D/FOLDER/SUB_FOLDER/File name.xlsx,
如果我引入捕获组,我只会得到其中一部分的正确返回: '目录:([^}]+)|数据库名:([^,]+)|文件名:([^,]+)'
返回:
\\\myserver\C\FOLDER\SUB_FOLDER
null
null
我已经设法让它与从
获取结果的嵌套正则表达式一起工作'directory: [^}]+|dbname: [^,]+|filename: [^,]+'
并使用:
': ([^,}]+)'
这给了我想要的结果,但我想将其作为一个正则表达式来执行。 任何帮助将不胜感激。
/阿龙
最佳答案
你可以使用 negated character class不匹配 {
, }
或逗号,匹配非捕获组中的任何选项并使用单个捕获组捕获值:
{[^{]+(?:filename|directory|dbname): ([^,}]+)[^}]*}
解释
{
匹配 {[^{]+
匹配 1+ 次 not { using a negative character class(?:filename|directory|dbname):
匹配任何列出的选项,后跟 : 和一个空格(
捕获 group1[^,}]+
匹配 1+ 次而不是,
或
)
关闭第 1 组[^}]*}
匹配0+次不是,然后匹配
}
关于正则表达式捕获组并使用 OR 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57522578/