2010-10-04 64 views
2

我仍然在学习PHP正则表达式,因此我希望有人能够帮助我完成我正在尝试完成的任务。PHP查找字符串并关注未知字符

$string = 'Writing to tell you that var MyCode = "dentline"; Learn it.'; 

我希望做的是符合其内容

var MyCode =" 

后,我相匹配的部分,我想检索动态生成字符后面的其余字符串的一部分串。在这个例子中,[dentline]是8个字符,但并非总是如此。因此,我想直到我达到

"; 

我已经有效地收集后,该字符串的一部分,我想要去除字符串一路匹配,因此其余的信息是双引号之间是什么样的

dentline 

任何帮助非常感谢!

+0

请问你的字符串总是被双引号,而不是单引号?你的字符串是否包含转义引号?代码中的空格是否有意义?变量名称始终是“MyCode”还是可以是其他名称? – 2010-10-04 22:47:16

+0

字符串总是用双引号。没有转义字符,没有空格,没有变量名称。就像一样。 – 2010-10-04 23:48:08

回答

7

试试这个:

$string = 'Writing to tell you that var MyCode = "dentline"; Learn it.'; 
$matches = array(); 
preg_match('/var MyCode = "(.*?)";/', $string, $matches); 
echo $matches[1]; 

结果:

dentline 

ideone

说明

 
var MyCode = " Match this string literally and exactly 
(    Start a capturing group. 
.*?    Match any characters, as few as possible (not greedy) 
)     End the capturing group. 
";    Match the closing double quote followed by a semi-colon 

的捕获组“捕获”匹配的内容并将其存储在数组$matches中,以便之后可以访问它。

关于这些构造的更多信息可以在这里找到:

变化

如果 “mycode的” 可以改变,然后用这个来代替:

preg_match('/var \w+ = "(.*?)";/', $string, $matches); 

在这个表达式中\w表示“匹配任何字符”。您可能还想使用\s+而不是空格,以便您可以匹配一个或多个任何空格字符(也是制表符和换行符)。同样,\s*匹配零个或多个空格。所以你尝试的另一种可能性是:

preg_match('/var\s+\w+\s*=\s*"(.*?)"\s*;/', $string, $matches); 
+0

令人惊叹,谢谢!你能否提供更多关于如何和为什么会起作用的信息? – 2010-10-04 22:47:32

+0

@Dave吻:我的更新答案有帮助吗? – 2010-10-04 22:53:53

+0

我不能要求更多,真的,一个伟大的资源。谢谢! – 2010-10-04 23:46:26