2016-12-14 3 views
1

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

$subname = "subarray({value=subarray({0.5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48}, EXCEL*48, 1)";    
preg_match('#\{(.*?)\}#',$subname, $match, PREG_OFFSET_CAPTURE); 
print_r($match[1][1]); 
$matchs = substr($subname, 0, $match[1][1]); 
print_r($matchs); 

Я хотел бы получить следующий текст от $ подимени

  1. 0,5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48
  2. EXCEL
  3. * 4 8

Я борюсь со вторым битом (получая слово EXCEL). Интересно, можно ли получить preg_match, чтобы дать мне остальную часть строки?

+0

Захват его с [ ' '# \ {(*.?)}, \ S * (\ р {L} +) (\ * \ D +) #''] (https: // regex101. com/r/w08NtY/1) –

+0

Да, возможно, просто измените '# \ {(. *?) \} #' на '# \ {(. *?), (EXCEL) (\ * 48) \} # '. Теперь, если слово может быть чем-то другим, пожалуйста, опишите свой шаблон, что может быть там и покажите, что вы пытались захватить недостающую часть. – sidyll

ответ

1

Вы можете использовать

'#\{([\s\d.,]*)},\s*(\p{L}+)(\*\d+)#' 

См regex demo.

Детали:

  • \{ - это {
  • ([\s\d.,]*) - Группа 1 захватывая 0+ пробельные, цифры, запятые и точки
  • } - буквальный }
  • , - запятая
  • \s* - 0+ пробельные символы
  • (\p{L}+) - Группа 2: одна или несколько букв
  • (\*\d+) - Группа 3: а * и 1+ цифры.

См. PHP demo ниже.

$subname = "subarray({value=subarray({0.5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48}, EXCEL*48, 1)";    
$res = array(); 
if (preg_match('#\{([\s\d.,]*)},\s*(\p{L}+)(\*\d+)#',$subname, $match)) { 
    $res = explode(", ", $match[1]); 
    array_push($res, $match[2]); 
    array_push($res, $match[3]); 
} 
print_r($res); 
+1

Большое спасибо Wiktor, это потрясающе, я не знал, что preg_match может все это сделать! –

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

  • Нет связанных вопросов^_^