2013-03-10 1 views
-1

Я пытаюсь понять, как вытащить несколько подстрок из строки, с которой у меня нет никакого контроля. Строка содержит 3 части информации, в которой я нуждаюсь. Это:Как получить подстроки с использованием PHP

Order # 
Middle Digits 
CV2 Number 

Каждая из этих частей информации является переменной длиной. Например, в приведенной ниже строке номер заказа равен 2, но вполне может быть 20 или 200, или 20174, или что-то еще. Средние цифры может быть 8 цифр или 2 номера, и т.д., и число CV2 может быть 3, 2 или 1 число ...

Here are the middle digits of the card number for order #2: 

Middle Digits: 11111111 

And here is the CV2 number: 

CV2 Number: 444 

В приведенном выше примере строки, мне нужно, чтобы получить номер заказа (2), средние цифры (11111111) и номер CV2 (444). Эти числа имеют произвольную длину или вообще не могут существовать.

Какие функции/логика PHP могут помочь мне надежно получить эти значения? Мне нужна только информация.

Спасибо!

+0

есть определенный формат, который вы собираетесь получать как? – ElefantPhace

+0

4-строчная строка выше - это точный формат, в который я ее принимаю. Единственная часть строки, которая когда-либо была бы другой, - это фактические числа. – rwkiii

+0

Затем вы должны иметь возможность читать строки за строкой. Тогда для второй и четвертой строк возьмите подстроку мимо символа ':' плюс, возможно, '' (пробел char) и верните следующий номер – ElefantPhace

ответ

0
The explode() function breaks a string into an array. 
explode(separator,string,limit); 

Для экс:

$str = "Hello world. It's a beautiful day."; 
print_r (explode(" ",$str)); 

Выход кода выше:

Array 
(
    [0] => Hello 
    [1] => world. 
    [2] => It's 
    [3] => a 
    [4] => beautiful 
    [5] => day. 
) 
+0

Спасибо. Однако я не знаю длины цифр. Они имеют произвольную длину. Я также не могу полагаться на предыдущий текст как на заданную длину, поэтому я тоже не буду знать стартовую позицию. Однако я могу полагаться на цифры, следующие за определенным форматом. Например, номер заказа всегда будет следовать подстроке 'order #', а средние цифры всегда будут следовать сразу после подстроки' Middle Digits: ' – rwkiii

+0

Итак, вы должны использовать функцию разрыва для этого, просто разделите строку и получите результат. –

+0

Почему ничто не мешало мне ???? –

-1

Вам нужно 2 думает использовать:

1) SUBSTR() вам может читать далее here!

string substr (string $string , int $start [, int $length ]) 

Возвращает часть строки, заданную параметрами начала и длины.

2) strpos() вы можете прочитать больше here!

int strpos (string $haystack , mixed $needle [, int $offset = 0 ]) 

Найти числовое положение первого появления иглы в веревке сена.

стог -The Строка для поиска.

иглы -Если игла не является строкой, он преобразуется в целое число и применяется как порядковое значение символа.

смещение -Если указан, поиск будет начинаться это число символов, считая с начала строки. В отличие от strrpos() и strripos() смещение не может быть отрицательным.

Вы должны найти ключевое слово, прежде чем значение, которое нужно как в "CV2 Number: 444" ключ, который вы должны посмотреть это положение CV2 Number: и значение, которое вы получите, используя SUBSTR() 444

Или вы можете использовать регулярное_выражение в php, используя:

int preg_match (string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]]) 

Ищет предмет, соответствующий регулярному выражению, указанному в шаблоне.

в то время как в этом примере

<?php 
$subject = "abcdef"; 
$pattern = '/^def/'; 
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE); 
print_r($matches); 
?> 

будет производить

Array 
(
    [0] => Array 
     (
      [0] => def 
      [1] => 0 
     ) 

) 
+0

это хороший ответ! зачем спускать ???? –

+0

Я просто оставлю всех. : P – rwkiii

+0

Благодарим вас за ответ. Я понятия не имею, почему кто-то может вас опустить. Я попробую! – rwkiii

1

Вы можете посмотреть в РНР preg_match() в сочетании с PCRE regex syntax для сопоставления с шаблоном текста.

Синтаксис регулярного выражения PCRE дает вам большую силу для сопоставления шаблонов. Вы можете получить эти числа, реализовав такие шаблоны, как: (для заказа #NNNN), (Средние цифры: NNNN), (CV2 Number: NNNN), где NNNN будет согласованным текстом.

Редактировать

Например, чтобы соответствовать номеру заказа, попробовать что-то вроде:

preg_match('/order #([0-9]+)/', $str, $matches); 

Тогда $matches[1] должен содержать совпадающий номер заказа.

+1

Зачем использовать downvote!?!?!?!? –

+0

Да, кто-то меня тоже подавил. Мне все равно, они, вероятно, не знают ответа. – rwkiii

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