#php #regex
#php #регулярное выражение
Вопрос:
У меня есть строка, подобная:
public $host = 'sth'; public $user = 'sth'; public $password = 'sth';public $db = 'dbname'; public $dbprefix = 'sth';
Я хочу получить значение $ db динамически. Я пробовал регулярное выражение:
#(.*)public(.*)$db(.*)=(.*)'(.*)';#is
результат пустого массива
Пожалуйста, не пишите, что я могу получить экземпляр класса и свойства, потому что я не могу, и это все. Существует больше возможностей, чем regex.
Проблема решена!
$file="public $host = 'sth'; public $user = 'sth'; public $password = 'sth'; public $db = 'get this value';
public $dbprefix = 'sth';";
$regex = "/.*publics $dbs =s '(.*?)';/i";
preg_match($regex,$file,$matches);
echo '<br><pre>';var_dump($matches);
$matches[1] — это ‘получить это значение’;
Комментарии:
1. Почему вы записываете все свои
.*
файлы?
Ответ №1:
Хотя я уверен, что есть лучший способ достичь того, чего вы хотите, вот регулярное выражение, которое должно соответствовать значению $db
:
/publics $dbs*=s*'(.*?)';/i
Посмотрите, как это используется здесь.
Комментарии:
1. Если быть точным, проблема была не устранена
$
.2. @NiettheDarkAbsol Не только это,
'(.*)'
соответствовало большему количеству, чем хотел OP, я сделал это нежадным.3.
preg_match('/publics $dbs =s '(.*?)';/i',$file,$matches);
пустой массив
Ответ №2:
Вы могли бы сделать так,
<?php
$mystring = <<<'EOD'
public $host = 'sth'; public $user = 'sth'; public $password = 'sth';public $db = 'dbname'; public $dbprefix = 'sth';";
EOD;
$regex = '~(?<=public $db = ')[^']*~';
preg_match_all($regex, $mystring, $matches);
var_dump($matches);
?>
Вывод:
array(1) {
[0]=>
array(1) {
[0]=>
string(6) "dbname"
}
}
Комментарии:
1. вам нужно экранировать
$
символ во входных данных, как я сделал в своем примере.2. Я не могу. Строка является динамической, и я ничего не могу там изменить
3. @turson теперь вам не нужно экранировать $ во входных данных.