Регулярное выражение Perl не совпадает с \ w + - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь извлечь некоторые данные из скалярной переменной, которые являются значениями базы данных:

Копирование моего кода здесь

$data = "header1        header2     header3     header4     header5 
-------------------------------------------------------
data1           1a          1b          1c          1d
data2           2a          2b          2c          2d
data3           3a          3b          3c          3d
(3 rows affected)";

if ($data =~ /header5\s+[\-|\s+]*(\w*)[^(]*/){
    print $1;
    print "inside if\n";
}
else {
    print "else part\n";   
}

Здесь я хочу получить следующие данные:

data1           1a          1b          1c          1d
data2           2a          2b          2c          2d
data3           3a          3b          3c          3d

Для этого я использовал регулярное выражение.

Но здесь я мог видеть $1 отпечатки data1 вместо значений до последнего.

Как я могу получить все(3 строки данных) данные в $1? Пожалуйста, помогите с регулярным выражением.

1 Ответ

3 голосов
/ 23 октября 2019

(\w*) соответствует 0 или более символам слова, то есть data1 в месте, где регулярное выражение находит это совпадение. Остальная часть текста до ( не включена в эту группу.

Использование

/header5\s[-\s]*([^(]*)/

См. онлайн-демонстрацию

Детали шаблона

  • header5 - буквенная строка текста
  • \s - пробел
  • [-\s]* - 0 или болеедефисы или пробелы
  • ([^(]*) - группа 1 ($1 содержимое): 0 или более символов, отличных от (.
...