Регулярное выражение для нескольких совпадений - PullRequest
0 голосов
/ 08 мая 2020

Я изо всех сил пытаюсь найти регулярное выражение, которое соответствует всем именам полей в операторе 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 и т. Д. c.

Я использую PowerShell, но это может быть C# (или, вероятно, Java или PHP), а также:

[Regex]::Matches($sql, $Muster,[System.Text.RegularExpressions.RegexOptions]::Multiline)

Вероятно, мне что-то не хватает в шаблоне (но я предполагаю, что регулярное выражение по умолчанию жадное).

С уважением, Петр

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Если имена столбцов всегда состоят только из букв, вы можете использовать:

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 будет массивом строк имен столбцов

0 голосов
/ 08 мая 2020

Я понятия не имею, что это за синтаксис, но в PowerShell вы должны создать $ sqText, более похожий на

$sqText = 'Select Nummer,Bez,Buchstabe,Maske,Zaehlkarte,Verteilart,Turnus,Verfart From AzStamm order by Nummer'

Затем вы можете сделать это:

$fieldnames = $sqlText -replace '^Select\s+(.*)\s+From.*$', '$1' -split ','

, чтобы получить массив с именами полей:

Nummer
Bez
Buchstabe
Maske
Zaehlkarte
Verteilart
Turnus
Verfart
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...