LINUX.ORG.RU
ФорумAdmin

!=(не равно) в регульрном вырожении на perl


0

0

Не могу найти в документации как на perl сделать regexp, со знаком !=

к примеру есть
две строки

|111|aaa|12345-123|bbb|
и
|111|aaa|.....|bbb

вместо точек, что-то не равное \d{5}-\d{3}
как мне сделать regexp, что бы поподало всё где нет \d{5}-\d{3}

для того чтобы поподало я знаю regexp как
/\|\d{3}\|\w{3}\|\d{5}-\d{3}\|\w{3}\|



★★

perldoc perlop :

Binary "!~" is just like "=~" except the return value is negated in
the logical sense.

Это имелось ввиду?

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

Ну почти так, хотелось бы в нутри regexpa
к примеру ведь можно написать /d3{3} или /d{5}
(/d{3})|(/d{5})

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

perldoc perlre:

"(?!pattern)"
A zero-width negative look-ahead assertion. For example
"/foo(?!bar)/" matches any occurrence of "foo" that isn't
followed by "bar". Note however that look-ahead and
look-behind are NOT the same thing. You cannot use this for
look-behind.

If you are looking for a "bar" that isn't preceded by a "foo",
"/(?!foo)bar/" will not do what you want. That's because the
"(?!foo)" is just saying that the next thing cannot be
"foo"--and it's not, it's a "bar", so "foobar" will match. You
would have to do something like "/(?!foo)...bar/" for that. We
say "like" because there's the case of your "bar" not having
three characters before it. You could cover that this way:
"/(?:(?!foo)...|^.{0,2})bar/". Sometimes it's still easier
just to say:

if (/bar/ && $` !~ /foo$/)

For look-behind see below.

Тоже не оно?

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