Игнорирование пробелов с помощью регулярных выражений (Perl) - PullRequest
4 голосов
/ 04 апреля 2010

Я использую регулярные выражения Perl. Как бы я пошел о игнорировании пробела и все еще выполнить тест, чтобы увидеть, если строка соответствует. Например.

$var = "         hello     ";     #I want var to igonore whitespace and still match
if($var =~ m/hello/)
{



} 

Ответы [ 4 ]

9 голосов
/ 04 апреля 2010

то, что у вас там должно совпадать просто отлично. регулярное выражение будет соответствовать любому вхождению шаблона hello, поэтому до тех пор, пока он видит «hello» где-то в $ var, он будет соответствовать

С другой стороны, если вы хотите быть строгими в том, что игнорируете, вам следует привязать вашу строку от начала до конца

if($var =~ m/^\s*hello\s*$/) {
}

и если в вашем наборе несколько слов

if($var =~ m/^\s*hello\s+world\s*$/) {
}

\ s * соответствует 0 или более пробелов, \ s + соответствует 1 или более пробелов. ^ соответствует началу строки, а $ соответствует концу строки.

1 голос
/ 28 июня 2014

Это регулярное выражение немного не связано, но если вы хотите объединить все пробелы в вашей строке перед передачей через if.

s/[\h\v]+/ /g;
1 голос
/ 04 апреля 2010

Как уже говорили другие, Perl совпадает в любом месте строки, а не со всей строкой. Я обнаружил, что это сбивает с толку, когда я только начинал, и меня все равно поймали. Я пытаюсь научить себя думать, нужно ли мне смотреть начало строки / всю строку и т. Д.

Еще один полезный совет - это использование \b. Это ищет разрывы слов, поэтому / \ bbook \ b / match

"book. "
"book "
"-book"

но не

"booking"
"ebook"
0 голосов
/ 04 апреля 2010

/ ^ \ с привет \ с $ /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...