regex - 多个匹配的正则表达式
问题描述
我正在努力寻找一个匹配 SQL 语句中所有字段名的正则表达式,该语句分配给这样的字符串变量:
sqlText := "Select Nummer,"
sqlText += "Bez,"
sqlText += "Buchstabe,"
sqlText += "Maske,"
sqlText += "Zaehlkarte,"
sqlText += "Verteilart,"
sqlText += "Turnus,"
sqlText += "Verfart "
sqlText += "From AzStamm order by Nummer"
到目前为止我想出的是
Select\s+([A-Za-z]+),
为模式。
我想要的是所有字段名称,例如 Nummer、Bez、Buchstabe 等。
我正在使用 PowerShell,但它也可能是 C#(或者可能是 Java 或 PHP):
[Regex]::Matches($sql, $Muster,[System.Text.RegularExpressions.RegexOptions]::Multiline)
我可能在模式中遗漏了一些东西(但我假设正则表达式默认是贪婪的)。
问候,彼得
解决方案
如果列名总是只包含字母,您可以使用:
select ((?:\p{L}+,\s*)*\p{L}+) from
select
...获取和之间以逗号分隔的名称列表from
:
$sqlText = "Select Nummer,"
$sqlText += "Bez,"
$sqlText += "Buchstabe,"
$sqlText += "Maske,"
$sqlText += "Zaehlkarte,"
$sqlText += "Verteilart,"
$sqlText += "Turnus,"
$sqlText += "Verfart "
$sqlText += "From AzStamm order by Nummer"
if($sqlText -match 'select ((?:\p{L}+,\s*)*\p{L}+) from '){
$ColumnNames = $Matches[1].Split(",") |ForEach-Object Trim
}
else{
Write-Error "Couldn't extract column names"
}
$ColumnNames
将是一个列名字符串数组
推荐阅读
- ubuntu-16.04 - 什么可能导致 tpm_unsealdata 无法写入文件?
- python - 对于数据框中的 NaN,我应该在 excel 中传递值 0.00(百分比格式)而不是 0。使用熊猫
- python - 气流:Google Cloud Composer:TypeError:“字节”类型的对象不是 JSON 可序列化的
- hyperledger-fabric - 一个组织的渠道
- r - 如果满足条件,则将整行添加到 R 中的新数据框
- python - groupby pandas dataframe 同时按日期和 id
- node.js - Angular 8/ ionic 4/ Socket.io - 无法连接到本地主机服务器
- ios - EPERM:不允许操作,chmod @react-native-community iOS
- flutter - Flutter Web:Flutter Web 应用程序中是否支持 Firebase Analytics?
- java - 在结果 Json 响应中显示类名称而不是对象