Определите выражение regex в C#, чтобы проанализировать синтаксис TCL, позволяя несколько строк в потоке токена, включаяC#

Место общения программистов C#
Ответить
Anonymous
 Определите выражение regex в C#, чтобы проанализировать синтаксис TCL, позволяя несколько строк в потоке токена, включая

Сообщение Anonymous »

У меня есть регулярность для сопоставления сценария TCL в качестве ввода. Он работает на 99%, но не совпадает с «», «правильно, все остальные строки и сопоставление в порядке, и все другие синтаксисы сочетаются, как и ожидалось, и возвращает поток токенов для анализа. < /P>
{ C#
//for example
string line1= [return [file attributes $var -readonly]
string line2 = set x [string map {"\"" ""} $var]

//The original regex is
//string in ""| certain chars| whitespace | all the operators
string pattern = @"(\""[^\""]*\"")|([\[\]{}();,])|\s+|(\+|-|\*|/|%)|()|(==|!=|=|)|(!|&&|\|\|)|(\^|&|\|)|(\?|:)";

//does the tokenizing
string[] regexResult = Regex.Split(line2, pattern, RegexOptions.None);

// Filter out all empty tokens
string[] tokens = regexResult
.Where(s => !string.IsNullOrWhiteSpace(s))
.ToArray();

// Split the string using the defined separators
return tokens;
}
< /code>
line1 tokenices fine, как и большинство синтаксиса

line2 не может сопоставить "" "" " - я пробовал многочисленные шаблоны, но побег", кажется, прекращает строку, и это оставляет висящим »после этого. Таким образом, результат - список такенсов, как этот < /p>
'set' 'x' '[' 'string' 'map' '{"\"' " "' '"} $var]'
- wrong should be '"\""'

The problem is in the first regex group (\""[^\""]*\"")
I also tried (?:"([^"\\]*(?:\\.[^"\\]*)*)") which is closer as it matches but matches on multiple strings
example f [string map {"\"" ""} $var]
This yielded the strings as tokens "\"\\\"\"" "\\\"" "\"\""
The first - not sure where this came from but it looks like C# escaped version of the next
The second seems correct
The third seems correct

The question is what is wrong with the regex to not properly id only 2 strings in the the line2 string?

Thanks


Подробнее здесь: https://stackoverflow.com/questions/797 ... tiple-stri
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»