我目前在PHP服务器上遇到正则表达式的一些问题。
这是我目前的常规表达方式:
/\{content="(?:([^"\|]*)\|?)+"\}/
我希望它匹配:
{content="default|test|content|text"}
然后在比赛中返回:
default
test
content
text
但是当我现在执行它时,我会在比赛中找回它:
array (
0 => '{content="default|test|content|text"}',
1 => '',
)
你们有没有问题我做错了什么?
亲切的问候,
Youri Arktesteijn
答案 0 :(得分:2)
三个阶段:
这是代码。
<?php
$string = '{content="default|test|content|text"}';
$my_matches = preg_match_all('!((?<=")([^|]+)(?=[|])|(?<=[|])([^|]+)(?=[|])|(?<=[|])([^|"]+)(?="))!',$string,$matches);
print_r($matches[0]);
?>
<强>输出强>
Array
(
[0] => default
[1] => test
[2] => content
[3] => text
)
一旦你有逻辑工作,那么你可以配对前瞻和后面的字符来缩短匹配字符串。
$my_matches = preg_match_all('!(?<=["|])([^|"]+)(?=[|"])!',$string,$matches);
<强>输出强>
Array
(
[0] => default
[1] => test
[2] => content
[3] => text
)
答案 1 :(得分:1)
我不知道如何使用单行正则表达式。无论如何,请尝试以下代码,
<?php
if (preg_match('/\{content="(?:([^\"]+))"\}/', $sContent, $matches) > 0) {
$result = explode('|', $matches[1]);
} else {
$result = array();
}
echo '<pre>' . print_r($result, true) . '</pre>';
?>