我有这样的字符串,结构如下:
somevalue, secondvalue, thirdvalue
总会有三个值,它们将以逗号分隔。
他们自己的实际值也可能包含,
s。
我使用此结构的一些数据示例:
app.weeks = 999, 999, app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register) / 7)
app.weeks = 999
是一整个值,后跟,
和
999
是一个完整的值,后跟,
和
app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register) / 7)
是另一个值。
以此字符串为例,并使用上述结构。
请记住,这些价值观并不固定,并不总是能够说明“app.weeks = 999}'
我想将其分为三个部分。
matches (
$1: app.weeks = 999
$2: 999
$3: app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register) / 7)
)
可以按任何顺序排列:
999, app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register) / 7), app.weeks = 999
app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register) / 7), app.weeks = 999, 999
或组合:
app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register) / 7), app.weeks = 999, app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register) / 7)
在这种情况下,它仍然需要匹配:
matches (
$1: app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register) / 7)
$2: app.weeks = 999
$3: app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register) / 7)
)
以上是申请的要求。
这是我的尝试:
^(.+,)(.+,)(.+)$
但它与任何东西都不匹配。我的正则表达式应该是什么?
在旁注中,此要求的背景是我正在尝试将MYSQL IF语句动态转换为TSQL Case语句。
答案 0 :(得分:1)
感谢您澄清问题。
基本上你想要找到的是逗号之间不在括号内的所有内容。
正则表达式
(?<capture>[^,()]+(?<par>\((?:[^()]*(?&par)*)*\))?)
应该这样做。
请注意,它会将数据拆分为两个标记: