preg_match选择外部字符串

时间:2013-06-10 02:31:36

标签: php regex preg-match-all

$newpair = '~I love~~you~ notes';

preg_match_all ('^\~(.*?)\~^' , $newpair, $np);

foreach($np[1] as $key ){
print_r($np[1]);
echo $key .'<br/>';
}

echo $np; //result: I love you

在preg_match之上回显~

中的字符串

你能帮忙创建一个表达式来回显外部文本notes吗?

3 个答案:

答案 0 :(得分:1)

$outside = preg_replace('#~[^~]*~#', '', $newpair);

这将返回一个字符串,该字符串由配对的tildas之外的所有内容组成。

答案 1 :(得分:0)

您可以找到具有正向背后的最后~,然后继续捕获不是~的所有内容,直到您使用$到达字符串的末尾:

(?<=~)[^~]+$

像这样使用它:

$newpair = '~I love~~you~ notes';
preg_match_all ('/(?<=~)[^~]+$/' , $newpair, $np);
var_dump( $np[0][0]);

Prints

string(6) " notes"

答案 2 :(得分:0)

你可以试试这个:

$subject = '~I love~~you~ notes';
$pattern = '/~\K[^~]++(?=~)/';

preg_match_all ($pattern, $subject, $matches);

print_r($matches);

$result = implode(' ', $matches[0]);

echo $result;

请注意,对于模式,我选择在与前瞻~匹配后检查是否有(?=...),但如果这不是必要条件,则可以将其删除。

\K重置模式的开头。