2016-06-07 2 views
1

Это код:preg_match() в PHP: хранение матчей в переменной

<?php 
$eqn1="0.068683000000003x1+2.046124y1+-0.4153z1=0.486977512"; 

if(preg_match("/^[0-9]\.[0-9]{1,}x[0-9]$/",$eqn1,$vx1)) 
{ 
echo "X1 is:". $vx1[0]; 
echo "Match found."; 
} 
else 
echo "Match not found."; 
?> 

ВЫХОД: матч не найден.

Здесь я пытаюсь извлечь значение x1 (то есть 0.068683000000003) и сохранить его в переменной «$ vx1». Он всегда возвращает «Матч не найден». Что не так с моим кодом? Если вы обнаружили какие-либо ошибки, предоставьте решение. Спасибо.

+0

Почему вы ожидаете, что он будет соответствовать? '^' и '$' соответствуют началу и концу строки, и ваш шаблон не соответствует этому. – Barmar

+0

Что относительно http://stackoverflow.com/questions/37671793/regular-expressions-in-php-extracting-values/37671837? Пожалуйста, сначала закройте свой предыдущий вопрос. –

ответ

0

Ваше регулярное выражение отлично работает, но вы должны удалить ^ и $ полукокса. Вы также должны положить скобки вокруг группы, которую хотите захватить.

if(preg_match("/([0-9]\.[0-9]*)x[0-9]$/",$eqn1,$vx1)) 

В символах ^ и $ значат захватить строку только содержащую прилагаемое регулярное выражение. Но ваша линия состоит скорее из этого числа. Если вы хотите использовать их так, как вы должны расширить регулярное выражение к чему-то вроде этого:

^.*="([0-9]\.[0-9]*)x[0-9].*$ 

Смотрите здесь http://regexr.com/3diqc для рабочего примера.

+0

Спасибо. Это работает. –

+0

Ваше приветствие, рад, что я мог бы помочь :) – cb0

+0

Также, как получить значения y1 и z1alone? Я попробовал то же самое и получил значение y1, с текстом «y1», следующим за значением на выходе. То есть, «2.046124y1» и «0.4153z1» соответственно. Но я хочу только значения, а не значения с y1 или z1. –

0

Это должно решить проблему:

<?php 
    $eqn1="0.068683000000003x1+2.046124y1+-0.4153z1=0.486977512"; 

    preg_match("/^[0-9]\.[0-9]{1,}/",$eqn1,$vx1); 
    print_r($vx1); 
+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего поста. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, что уменьшает читаемость кода и объяснений! – Rizier123

0
<?php 
$eqn1="0.068683000000003x1+2.046124y1+-0.4153z1=0.486977512"; 

if(preg_match("/(?<vx1>^[0-9]\.[0-9]{1,})x[0-9]/", $eqn1, $vx1)) { 
    echo "X1 is:". $vx1['vx1']. "\n"; 
    echo "Match found.";**strong text** 
} else {                                                   
    echo "Match not found."; 
} 

результат

X1 is:0.068683000000003x1 
Match found.array(3) { 
    [0]=> 
    string(19) "0.068683000000003x1" 
    ["vx1"]=> 
    string(17) "0.068683000000003" 
    [1]=> 
    string(17) "0.068683000000003" 
} 

систематическая ошибка:. Если (preg_match ("/^[0-9] [0-9] {1}, х [0-9] $/", $ eqn1, $ vx1))

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