如何获得第一个引号中的单词?

时间:2012-03-18 04:20:04

标签: php regex

假设我有这个文本(不被视为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中第一个引号中的单词列表?

2 个答案:

答案 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);

不确定你为什么要这样做,但上面应该有效