Текущий архив: 2009.05.10;
Скачать: CL | DM;
Вниз
Regular Expression Найти похожие ветки
← →
Mephisto (2009-03-05 11:55) [0]не получается написать регулярное выражения которое бы из строки
"a1 a2 a3 a4 a5"
извлекало все числа. Делаю так:"\w(\d)"
извлекается только первое число. Помогите исправить
← →
palva © (2009-03-05 12:11) [1]Этот вопрос не решается написанием правильного выражения. Нужно указание дополнительных параметров. А это зависит от движка, который вы используете, но о котором не говорите.
> "\w(\d)" извлекается только первое число.
Это не так. Извлекается слово, за которым следует цифра, т. е. никак не число.
← →
test © (2009-03-05 12:14) [2]Используй не жадный поиск, по умолчанию используется жадный(первое вхождение и выходим) в библиотеке указывается не жадный поиск(сколько найдем все наше) и задачка решена.
← →
antonn © (2009-03-05 12:45) [3]
> извлекало все числа
каким образом "извлекало"? оставляя числа на своих местах или возвращала из строки только встречающиеся символы?
если последнее то есть вариант просто удалить все не числа, с первым - оставляя пробельные символы:$text="a1 a2 a3 a4 a5 12";
function get_num($a) {
return preg_replace("/[^0-9]/", "", $a);
}
function get_num_space($a) {
return preg_replace("/[^0-9\s]/", " ", $a);
}
echo get_num($text)."<br>";
echo get_num_space($text);
← →
test © (2009-03-05 12:56) [4]Возможно еще проблема в (\d) что соответствует (\d{1}), то есть выбрать одну цифру, используй (\d+) выбрать все цифры или укажи явно сколько цифр хочеш получить, например (\d{4}) выбрать ровно 4 числа в строке или (\d{1,4}) выбрать от одной до четырех цифр в строке
← →
antonn © (2009-03-05 13:13) [5]
> test © (05.03.09 12:56) [4]
это в дельфи такие регулярки? ужас... в PCRE \d{4} будет искать 4 цифры идущие подряд
← →
NieL © (2009-03-05 13:16) [6]Если используешь vbscript.dll то можно так:
procedure Tfrm_RegEx.btn_ExecuteClick(Sender: TObject);
var
i : Integer;
MC : MatchCollection;
RegExp: TRegExp;
begin
RegExp := TRegExp.Create(nil);
with RegExp do
try
Pattern := "\s*\w(\d)";
IgnoreCase := True;
Global := True;
MC := Execute("a1 a2 a3 a4 a5")
as MatchCollection;
for i := 0 to mc.Count - 1 do
ShowMessage(((MC[i] as Match).SubMatches as SubMatches)[0]);
finally
RegExp.Free;
end;
end;
← →
test © (2009-03-05 13:19) [7]antonn © (05.03.09 13:13) [5]
Я так и написал
4 числа в строке == 4 цифры идущие подряд
← →
antonn © (2009-03-05 13:25) [8]
> test © (05.03.09 13:19) [7]
>
> antonn © (05.03.09 13:13) [5]
> Я так и написал
> 4 числа в строке == 4 цифры идущие подряд
!=
выбрать ровно 4 числа в строке
:)
← →
test © (2009-03-05 13:26) [9]antonn © (05.03.09 13:25) [8]
Не придерайся к каждому слову и запятым, а то работать тут роботом по проверки орфаграфии порекомендую тебя администрации ))
← →
antonn © (2009-03-05 13:29) [10]ну блин, смысл то совсем другой получился, почему я и удивился (удивился, а не ехидно сделал замечание! :)), регулярки не прощают вольностей в трактовании %)
← →
Anatoly Podgoretsky © (2009-03-05 13:30) [11]> test (05.03.2009 13:19:07) [7]
Это неверное определение, это одно число.
← →
test © (2009-03-05 13:33) [12]antonn © (05.03.09 13:29) [10]
Anatoly Podgoretsky © (05.03.09 13:30) [11]
Не то слово написал, бывает блин
← →
Медвежонок Пятачок © (2009-03-05 13:38) [13]with TRegExpr.Create do
try
Expression := "\w(\d)";
InputString := "a1 a2 a3 a4 a5";
i := 1;
if Exec(i) then
while Exec(i) do
begin
ShowMessage(Match[1]);
i := succ(MatchPos[1]);
end;
finally
Free;
end;
← →
palva © (2009-03-05 13:48) [14]
> выбрать ровно 4 числа в строке
Какие-то непонятные споры. Автору нужны числа, состоящие из ОДНОЙ цифры, перед которым стоит алфавитно-цифровой символ. Посмотрите на его регулярное выражение. Оно его устраивает за исключением того, что ему нужны ВСЕ вхождения таких чисел. Он спрашивает, как сделать поиск глобальным. Такая возможность наверняка имеется, только автор должен сообщить, на чем он пишет свое регулярное выражение. Например на JavaScript к регулярному выражению нужно приписать букву g. Положите такой скрипт в файл с расширением js и запустите его. Он последовательно выведет 1 2 3 4 5 6, что и требовалось.
s = "a1 a2 a3 a4 a5 66"
re = /\w(\d)/g
while(r = re.exec(s)) WScript.Echo(r[1])
← →
Медвежонок Пятачок © (2009-03-05 13:53) [15]while(r = re.exec(s)) WScript.Echo(r[1])
автор замучается смотреть на бесконечный поток единиц
← →
Медвежонок Пятачок © (2009-03-05 13:58) [16]Например на JavaScript к регулярному выражению нужно приписать букву g.
жадность или не жадность здесь конкретно никак не поможет
← →
Медвежонок Пятачок © (2009-03-05 14:00) [17]тем более что она актуальна/не актуальна когде есть * или +
← →
test © (2009-03-05 14:02) [18]Медвежонок Пятачок © (05.03.09 14:00) [17]
(\d+) вот так не жадный поиск что искать будет?
← →
Медвежонок Пятачок © (2009-03-05 14:03) [19]> "\w(\d)" извлекается только первое число.
Это не так. Извлекается слово, за которым следует цифра, т. е. никак не число.
Ищется ровно один символ - буква, цифра или _, за которым следует один символ - цифра
← →
test © (2009-03-05 14:05) [20]Медвежонок Пятачок © (05.03.09 14:03) [19]
Да автора давно нет, а телепатией не многие тут обладают свободно что бы четко поставить диагноз ))
← →
palva © (2009-03-05 14:10) [21]
> Медвежонок Пятачок © (05.03.09 14:03) [19]
Да, это я сходу не разобрался. Потом исправился.
← →
Медвежонок Пятачок © (2009-03-08 12:53) [22](\d+) вот так не жадный поиск что искать будет?
<Цитата>
такой нежадный (как и жадный) найдет непрерывную последвательность символов - цифр
Страницы: 1 вся ветка
Текущий архив: 2009.05.10;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.008 c