粗体的文字是我想要捕捉的“的院子”。
一艘船在这里。(在,院子,)
一艘船在这里。在,院子,
我的正则表达式捕捉到了“这里”。(在院子里),它会被第一个"in“捕获,但我试图让它只捕捉到"in”的最后一个出现。
我现在的判断力是
\s\(?in([^\)]+)\)?$如果您知道解决方案,请解释正则表达式,我想了解它是如何工作的。
发布于 2011-01-31 10:42:27
\s找到一个空间
\(?零或一个(即可选)开括号
in文字I后面跟着文字n
[^\)]+捕获:一个或多个字符,其中没有一个是) (也可能是\ (不确定此位))
\)?可选闭括号
$线路末端
这显然与第一个字符串匹配,并捕获了here. (in the yard。
修正:
.*\s\(?in([^\)]+)\)?$.*使regex引擎首先找到字符串的结尾。然后它从那里回溯到最后一个。
发布于 2011-01-31 10:29:52
判断力
/.*(?<=\bin\b)(?P<founded>.*?)$/\b是一个单词边界,(?<= ....)是一个外观,behind.$是string.*的末尾,是greedy.*?是非贪婪的所以完整的代码是
<?php
$str = "I am in the backyard";
preg_match('/.*(?<=\bin\b)(?P<founded>.*?)$/', $str, $matches);
var_dump($matches['founded']);
// returns string(13) " the backyard"或者简单的
$str = "I am in the light in the backyard";
$matches = preg_split('/\bin\b/', $str);
var_dump(end($matches));
// returns string(13) " the backyard"https://stackoverflow.com/questions/4849757
复制相似问题