2013-09-09 5 views
1

Могу ли я выбрать номер 3433 в этом примере сгенерированного файла с таким количеством пробелов, которое я не могу контролировать?Выберите один номер между другими с пробелами

BIOLOGIQUES                3433  130906/3842 

Пожалуйста, смотрите пример здесь: http://regexr.com?368ku

Число 3343 может меняться от одного файла к Иным, но он будет всегда один и тот же позиции/

Я использую регулярное выражение с PHP ,

Это pdf-документ, который я преобразовываю с помощью функции pdftotext из xpdf, и поэтому у меня должно быть такое число, которое изменяется от PDF к другому.

Это очень плохое положение, и я не знаю, как его захватить с помощью регулярного выражения.

Я пробовал:

BIOLOGIQUES [^0-9]*\K([0-9]*)(.*) 

http://regexr.com?368ku но он принимает все номера, мне нужен только первый из них.

ответ

3

Вы делаете это слишком сложно. Что-то, как это будет работать:

BIOLOGIQUES\s+(\d+) 

Что соответствует строке «биологических исследований» в буквальном смысле, то один или более пробельные символы, а затем захватывает одну или несколько цифр, сохраняя свой номер в захвате группы 1.

Используйте его в PHP, как это:

$str = 'DES ANALYSES BIOLOGIQUES                      3433  130906/3842'; 
preg_match('/BIOLOGIQUES\s+(\d+)/', $str, $matches); 
echo $matches[1]; 

Вы можете видеть из this demo, что это производит:

3433 
+0

Спасибо Он взял слово Biologique Whith ней и ряд пространств Я пытался [^ биологических исследований 0-9] * \ K ([0-9] *) () и отлично работает Что вы думаете об этом синтаксисе? – amorino

+0

@amorino - Это будет соответствовать многим вещам, которых вы не ожидаете. У вас есть пустая группа захвата '()', а '[^ 0-9]' заставляет вас сопоставлять вещи * other * then whitespace, чего вы не пытаетесь сделать. См. Мой ответ, я думаю, что это намного проще, чем ваш подход. – nickb

+0

спасибо. Я дам вам задание и дайте знать – amorino

0

Я попытался BIOLOGIQUES[^0-9]*\K([0-9]*)() и работал отлично

Смежные вопросы