Не верно работают регулярные выражения
Есть строка типа "sdfs5342Цех=45;sdfsr4325234sdf"
Надо получить номер цеха.
Для этого использую регулярное выражение "Цех=(\d++);"
Программа возвращает "Цех=45;"
Помогите найти ошибку! Заранее благодарю!
Код:
procedure TForm8.Button1Click(Sender: TObject);
var
M: TMatchCollection;
i: Integer;
re: TRegEx;
begin
//Получаю список номеров цехов
Memo1.Clear;
if TRegEx.IsMatch(Edit1.Text, 'Цех=(\d++);', [roExplicitCapture]) then begin
M := TRegEx.Matches(Edit1.Text, 'Цех=(\d++);', [roExplicitCapture]);
for i := 0 to M.Count - 1 do begin
Memo1.Lines.Add(M[i].Value);
end;
end;
end;
var
M: TMatchCollection;
i: Integer;
re: TRegEx;
begin
//Получаю список номеров цехов
Memo1.Clear;
if TRegEx.IsMatch(Edit1.Text, 'Цех=(\d++);', [roExplicitCapture]) then begin
M := TRegEx.Matches(Edit1.Text, 'Цех=(\d++);', [roExplicitCapture]);
for i := 0 to M.Count - 1 do begin
Memo1.Lines.Add(M[i].Value);
end;
end;
end;
- В чем ошибка то? от arrjj, 29 июня 2012 года
Возвращает "Цех=45;", а я хочу чтобы возвращал число "45"
а если так 'Цех=(\d+);' ?
Цитата: kot_
а если так 'Цех=(\d+);' ?
Тоже самое: Цех=45;
Пишу на Dephi XE2, если это важно.
Код:
(?:Цех=)(\d+)
Цитата: HowlingWind
Цитата: kot_
а если так 'Цех=(\d+);' ?
Тоже самое: Цех=45;
Пишу на Dephi XE2, если это важно.
не знаю на делфи проверить не могу. а что вернет M[1].Value для выражения (Цех=)(\d+)(;)?
все равно Цех=15
Ничего не возвращает. Совсем ничего.
Код:
M := TRegEx.Matches(Edit1.Text, '(?:Цех=)(\d++)(?:;)', [roIgnoreCase]);
ну и я думаю понятно, что при таком реге надо проверять не M[1].Value а M[0].Value
Цитата: kot_
Код:
M := TRegEx.Matches(Edit1.Text, '(?:Цех=)(\d++)(?:;)', [roIgnoreCase]);
ну и я думаю понятно, что при таком реге надо проверять не M[1].Value а M[0].Value
Все равно возвращает "Цех=45;"
регулярное выражение возвращает номер цеха из твоей строки вторым элементом массива
Вот такое
Цитата: intro
Вот такое регулярное выражение возвращает номер цеха из твоей строки вторым элементом массива
Дак вот! Должно работать. Но у меня в MatchCollection только одна запись TMatch со значением "Цех=45"!
Цитата: HowlingWind
Цитата: intro
Вот такое регулярное выражение возвращает номер цеха из твоей строки вторым элементом массива
Дак вот! Должно работать. Но у меня в MatchCollection только одна запись TMatch со значением "Цех=45"!
на самом деле практически все предложенные варианты - 100% рабочие. Ищи ошибки в своем коде. Либо есть баг в делфийской реализации.
Или ты проверяешь только первый элемент массива. Используй отладчик и посмотри что у тебя творится при поиске.