2016-08-18 1 views
0

Я хочу извлечь измерение из этой заданной строки.Извлечь размеры из строки с помощью PHP

$str = "enough for hitting practice. The dimension is 20'X10' *where"; 

Я ожидаю 20'X10' как результат.

Я попытался использовать следующий код, чтобы получить номер до и после строки 'X. Но он возвращает пустой массив.

$regexForMinimumPattern ='/((?:\w+\W*){0,1})\'X\b((?:\W*\w+){0,1})/i'; 
preg_match_all ($regexForMinimumPattern, $str, $minimumPatternMatches); 
print_r($minimumPatternMatches); 

Может ли кто-нибудь помочь мне исправить это? Заранее спасибо.

+0

- строка всегда одинаковая, кроме части измерения? –

+0

nop .. Строка может измениться. – Jenz

+0

Всегда ли это в футах и ​​целое число? Если да, то я думаю, что '\ d + '\ h * X \ h * \ d +'' будет более строгим регулярным выражением. Если '1.75'X3.75'' или' 1'9 "X3'9" 'будет действительным, вам понадобится что-то более свободное. – chris85

ответ

0

Просто удалите \b из вашего шаблона (и присоединять \' в конце концов, если вы хотите косую цитата):

$regexForMinimumPattern ='/((?:\w+\W*){0,1})\'X((?:\W*\w+){0,1})\'/i'; 

NB: \b является meta-character for word-boundaries, вам не нужно его здесь.

+0

В результате получается 20'X10 вместо 20'X10 '. Последняя цитата отсутствует. – Jenz

+0

@Jenz Я обновил ответ. – fiddler

+0

@ fiddler. Спасибо, что он возвращает то, что я ожидал. – Jenz

0

Предполагая, что формат строки мы хотим 00'X00:

$regexForMinimumPattern ='/[0-9]{1,2}\'X[0-9]{1,2}/i'; 

это дает результат, как

Array ([0] => Array ([0] = > 20'X10))

+0

Мне это нужно как 20'X10 ' – Jenz

+0

Тогда просто добавьте «в конец». '/ [0-9] {1,2} \ 'X [0-9] {1,2} \'/i' –

+0

хорошо, если вы посмотрите на рисунок, просто добавьте еще один 'перед/i –

0

Итак: может ли простой preg_replace() сделать это? Возможно ...

<?php 
    $str = "enough for hitting practice. The dimension is 20'X10' *where"; 
    $dim = preg_replace("#(.*?)(\d*?)(\.\d*)?(')(X)(\d*?)(\.\d*)?(')(.+)#i","$2$3$4$5$6$7", $str); 
    var_dump($dim);  //<== YIELDS::: string '20'X10' (length=6) 

Вы можете опробовать Here.

+0

Это много групп захвата, почему не только одна большая группа захвата? Кроме того, цифры, вероятно, не должны быть необязательными, если бы совпадал с указанным «X». – chris85