2014-10-31 3 views
0

У меня есть этот код в моем JQuery:Воссоздать этот JQuery в PHP

var pattern = /\d+/g; 
var retorno = []; 
var aux; 
var inputTxt = "30/60/90" 

while (aux = pattern.exec(inputTxt)){ 
    retorno.push(aux[0]); 
} 

мне нужно сделать что-то очень похожее на PHP, я пытался

while ($aux = $pattern.exec($inputTxt)){ к while ($aux = $pattern.exec($inputTxt)){To:

preg_match($pattern, $frm_condicao_de_pagamento, $aux, PREG_OFFSET_CAPTURE); 
for($i = 0; $i < count($aux); $i++){ 

Но эта ошибка возникает: "E_WARNING: type 2 - preg_match() [function.preg-match]: Неизвестно модификатор 'g' - в строке 5 ", и я даже не уверен, что я должен использовать функцию preg_match() для этого.

Идея кода - проверить, являются ли данные (арифметическая прогрессия ИЛИ номерами определенного формата (это проверяется внутри цикла)).

Таким образом, результат должен быть: array(30,60,90);

+1

не используйте 'preg_match 'w с '/ g'. Используйте 'preg_match_all'. – amphetamachine

+1

Зачем вы используете регулярное выражение здесь? Почему не просто 'inputTxt.split ('/')' или 'explode ('/', $ inputTxt)'? –

+0

@RocketHazmat, потому что вход может быть как '30/60/90 ', но также как '30 -60-90' или '30 - 60 // 90 'или' 30_60_90 'или' 30x60x90 '... Кроме того, я необходимо собрать, когда это «30x» и «30d» **, обратите внимание, что 30/60/90 являются вымышленными числами, например, 10/15/20 или 32/50/55. Для получения дополнительной информации, проверьте мой последний вопрос [«Сплит Regex ничего, кроме номера»] (http://stackoverflow.com/questions/26639211/split-regex-anything-but-number) –

ответ

1

вы можете использовать preg_match_all() функцию, чтобы получить все матчи, например (в этом случае вам не нужно, чтобы добавить г флаг):

$str = "30/60/90" ; 
$matches; 
preg_match_all('/(\d+)/',$str, $matches); 
print_r($matches); 

Отметим здесь, что я использую() и \ d внутри, цель использования(), чтобы сгруппировать матчи, так что вы можете получить к ним доступ с помощью $ 1 $ 2 т.д.,

+0

Я протестировал в [PHPFiddle] (http : //phpfiddle.org/) и возвращают два идентичных массивов 'массива ( [0] => Массив ( [0] => 30 [1] => 60 [2] => 90 ) [1] => Массив ( [0] => 30 [1] => 60 [2] => 90 ) ) ' –

+1

да я говорил вам, если вы удалите() outiside \ d + y ou получит желаемый массив, но, возможно, вы хотите получить доступ к совпадениям на $ 1 $ 2, и поэтому я добавил() по причинам группировки – Ismail

+0

Извините, я не прочитал эту часть вашего ответа, моя вина. Спасибо, это то, что мне нужно. знак равно –