LINUX.ORG.RU

Регексп (Перл)


0

0

Как написать регулярное выражение по след фразе : если строка состоит из точек и чисел и пробелов то все ОК иначе ERR.

anonymous

$str =~ /[^\.\d\s]/ ? 'err' : 'ok';

lodin ★★★★
()
Ответ на: комментарий от ed__ed

Кстати да!
Только надо ещё "и не содержит остального" добавить:
&& ! /[^\. \d]/

lodin ★★★★
()

Если бы не "чисел", а "цифр", и не подразумевается множественное число для точек и пробелов, т.е. "хотя бы одна точка"...:

perl -e '$test_str="99.11 22.00 21"; print "Это какая надо строка" if $a =! /(?=.*\.)(?=.*\d)(?=.*\s).*[^\.\d\s]/'

anonymous
()

Нет, наверное, так...

perl -e '$test_str="99.11 22.00 21"; print "Это какая надо строка" unless $a =~ /(?=.*\.)(?=.*\d)(?=.*\s).*[^\.\d\s]/'

anonymous
()
Ответ на: комментарий от anonymous

я так понял что кроме цифр, точке и пробелов больше ничего присутствовать в строке не должно. но ни первый ни второй вариант не работают со строкой "99.11 2aaa0 21" (оба выдают 'Это какая надо строка').
так что думаю всетаки правильней будет:
perl -e '$_="99.11 22.0aaaa0 21"; $test=(/\.+/ && /\d+/ && / +/ && !/[^\.\d ]/)?"ok":"err"; print $test;'

ed__ed
()
Ответ на: комментарий от anonymous

а все работает... вы просто не ту переменную сравниваете :)

ed__ed
()
Ответ на: комментарий от Laz

а поему этот вариант работает ( т е все кроме строк сост из . цифорок и пробелов ) - ERR

anonymous
()
Ответ на: комментарий от anonymous

>> /^[.0-9 ]+$/

>Этот регэксп сосёт. 1e5, скажем, - вполне себе число.

У автора не было никаких указаний на то, что он считает числом. xyz тоже вполне себе число в некоторых системах счисления.

Laz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.