假设我有这个文本(不被视为PHP代码):
$this->validation->set('username','username','trim');
$this->validation->set('password','password','trim');
$this->validation->set('password2','password2','trim');
$this->validation->set('name','name','trim');
$this->validation->set('surname','surname','trim');
我想得到set(
之后的第一个单词列表,这些单词在每一行都是引号,所以前一个输入的输出必须是这样的:
username
password
password2
name
surname
我认为,使用正则表达式是可能的。我的问题是如何才能获得PHP中第一个引号中的单词列表?
答案 0 :(得分:4)
让我们说变量$text
包含您问题中的数据。
让我们分析正则表达式/set\('(.*?)'/
:
/
是分隔符。
set\('
和'
分别是字符串set('
和'
。
.*?
是上述两个字符串中(任意)字符的最少量。 1
因此,此正则表达式匹配:
$this->validation->set('
的 username
强> ','username','trim');
要在数组$matches[1]
中存储您需要的所有字符串,我们可以使用函数preg_match_all
。
只需拨打preg_match_all("/set\('(.*?)'/", $text, $matches)
。
1 另请参阅:Regex Tutorial - Repetition with Star and Plus - Laziness Instead of Greediness
示例代码:
$text = <<<EOF
\$this->validation->set('username','username','trim');
\$this->validation->set('password','password','trim');
\$this->validation->set('password2','password2','trim');
\$this->validation->set('name','name','trim');
\$this->validation->set('surname','surname','trim');
EOF;
preg_match_all("/set\('(.*?)'/", $text, $matches);
print_r($matches[1]);
答案 1 :(得分:-1)
$arr = explode("'","this->validation->set('surname','surname','trim')");
print_r($arr);
不确定你为什么要这样做,但上面应该有效