Войти

Показать полную графическую версию : Регулярное выражение


Страниц : [1] 2

benya
16-08-2005, 14:13
Господа, как написать регулярное выражение которое вырезает первых 2 символа или один в зависимости от длины строки. Нужно проверить только 2 условия на 6 и 5 цифр.
Например, имеем число: 25000
Если число имеет 6 цифр, оставляем только первых 2, тоесть 25
Если же число имеет 5 цифр, оставляем только одно. Тоесть 2
Можно ли задать такое регулярным выражением??
Не хотелось бы писать всякие if-then-else....

vadimiron
16-08-2005, 15:50
а что надо?? Может просто делить на 1000 и всё??

mar
16-08-2005, 15:51
Не хотелось бы писать всякие if-then-else....
это шутка, или непонимание, что такое разветвление и условие в программировании? Если экономия места, то пишите
strlen($a) == 5 ? вариант раз : вариант два;

XCodeR
16-08-2005, 23:11
benya
может быть если напишете, что конкретно надо, будет понятнее?

mar
чтоб тему новую не создавать, можете написать синтаксис сокращенного ветления( = ? : ).

mar
16-08-2005, 23:48
Xcode
условие? вариант, работающий при выполнении условия : вариант, идущий в случае невыполнения;
Это как-то уже всплывало в теме Пользовательский ввод - не позволить рвать страничку. (http://forum.oszone.net/showthread.php?t=31028), и тоже, как побочный результат жизнедеятельности.
Но в нашем-то случае, имхо все - побочное, а решение, как уже сказал vadimiron - надо просто все делить на энное количество тысяч и отбрасывть дробную часть.

E-mail
17-08-2005, 01:18
([0-9][0-9])[0-9][0-9][0-9][0-9]

([0-9])[0-9][0-9][0-9][0-9]

такое?:)

eleo
17-08-2005, 15:08
если я правильно поняла отбрасываются последние 4 цифры:
/(\d{1,2})\d{4}$/

XCodeR
17-08-2005, 21:47
E-mail,eleo
зачем уводить человека в лес?...
vadimiron и mar имхо дали более корректный совет.
"strlen + if + деление" работают быстрее, чем функции регулярных выражений.
имхо...

benya
17-08-2005, 22:16
Мне на самом деле нужно было вычислить количество лет от определенной даты.
Правильно подкинул идею vadimiron.
Там вообще не нужны никакие регулярные выражения.
Я сделал так :
$vozrast = "19791012"; день рождения
$dr = "20050818"; # текущая дата
$vozrast = int(($dr-$vozrast)/10000);
Получаем правильное число даже если человеку будет 200 лет ;)))

vadimiron
18-08-2005, 00:09
Правильно ответил vadimiron, только я делю на 10000. И отбрасывал остачу. Все работает. Спасибо
В комплекте с ПХП ещё есть интересная функция bcdiv, в ней можно делить два числа и указывать, сколько знаков после запятой нужно считать

benya
18-08-2005, 11:07
Мда, только вот пишу я не на php, а на Perl, а там такой функции видимо нет ;))

slaine
18-08-2005, 13:25
F как мне игнорировать больше одного тега <BR>?
Если нужно, чтобы пустые строки нешли подряд больше одного раза.
типа вот так:
asd





ads

Prisoner
18-08-2005, 16:39
Можно так:
$result = preg_replace('/(?:\s*<br>\s*){2,}/i', '<br>', $subject);
С учетом, что в последовательности <br> могут быть пробельные символы и регистронезависимости.

slaine
18-08-2005, 16:57
Круто..
Надо мне всё-таки подучить регулярные выражения.

vadimiron
18-08-2005, 17:30
Можно так:

PHP код:
$result = preg_replace('/(?:\s*<br>\s*){2,}/i', '<br>', $subject);

slaine
Здесь тоже не обязательно пользоваться регулярками. Когда точно известен набор букв, которые мы хотим заменить. то лучше пользоваться стринг-функциями ПХП, БЫСТРЕЙ будет.
Например:mixed str_replace ( mixed search, mixed replace, mixed subject )

Регулярки нужны, когда мы не знаем, как выглядит строка, например имеется информация только о том, что в строке сначало идут 3 цифры, а потом бесконечное число букв и пробелов, в этом случае без регулярных выражений не обойтись.

К модерам: может сделаем прикреплённую тему по регуляркам, у меня будет время в середине августа, я смогу небольшой мануал накатать???

slaine
18-08-2005, 18:28
Здесь тоже не обязательно пользоваться регулярками. Когда точно известен набор букв, которые мы хотим заменить. то лучше пользоваться стринг-функциями ПХП, БЫСТРЕЙ будет.
Например:mixed str_replace ( mixed search, mixed replace, mixed subject )

vadimiron
И как в моём случае это будет выглядеть?

Prisoner
18-08-2005, 18:45
vadimiron
Я тоже помню эту цитату по производительности из мануала ;). На вскидку фигура "str_replace" в мозговом тетрисе никуда не вляпалась... И все только из-за всяких возможных гадостей между br'ками

vadimiron
19-08-2005, 13:02
slaine, Prisoner
Правильно, моя ошибка, так как мы вырезаем только те <br>, которые друг за другом идут. А если между ними есть текст, то не вырезаем-это как раз случай для регулярных выражений :)

Jekamajor
22-08-2005, 18:00
при помощи какого js регулярного выражения в тексте можно найти всё, кроме определенной последовательности символов?

Допустим var regExp=/word/g; найдет только слово "word", а как можно найти все остальное, кроме слова "word"?
Например var regExp=/[^word]/g; найдет все символы в тексте, кроме символов 'w' 'o' 'r' 'd', а можно ли каким-либо образом указать, чтобы "word" в квадратных скобках интерпретировалась не как любая последовательность символов 'w' 'o' 'r' 'd', а как строгая последовательность 'word'? Спасибо

Prisoner
22-08-2005, 18:35
Имхо, тут как раз не стоит применять регулярки. Бить по словам и циклом, циклом! :)




© OSzone.net 2001-2012