Опитвам се да създам реджекс, който улавя дума в ред (основно това е името на дисковото устройство), но изключва всички имена с някакъв формат. Например:
if (/^s*(?:d+s+){3}(S+)s.*/)
Този регекс съвпада:
8 80 7814026584 sdf
sdf в този ред. Но има някои ram дискове, които искам да изключа. напр. ram1, ram2, ram3, ..ram15 и т.н. Как мога да изключа всички устройства, започващи с „ram“?
Отговори:
1 за отговор № 1С примера показвате, че е по-лесно разцепване линията и след това можете лесно да обработвате.
Приемам, че четвъртото поле винаги е критерият за това дали да обработва или изключва реда.
Ако приемем това $fh
е файловият файл за файла, който обработвате
while (<$fh>)
{
my @fields = split;
# Skip this line if the fourth field starts with "ram"
next if $fields[3] =~ /^ram/;
# Process as needed
# Numbers are at indices 0, 1, 2, and disk device name is $fields[3]
}
Най- split
по-горе е същото като split " ", $_
, където " "
е всяко количество от всяко бяло пространство.
0 за отговор № 2
Ако искате специален операционен оператор, отколкото мисля, че този кратък регекс помага?
[^ Г] + ramw {1,2}