简单的问题对你们来说。 对不起,我得问一下。
在我的网站上,我想在"随机"处使用签名。我的文字中的地方。问题是,这个给定的字符串中可能有多个不同的签名。
签名代码为~~USERNAME~~
所以像
一样~~timtj~~
~~foobar~~
~~totallylongusername~~
~~I-d0n't-us3-pr0p3r-ch@r@ct3r5~~
我尝试过使用preg_match
,但没有成功。我知道第三个参数用于存储匹配项,但由于格式原因我无法正确匹配。
我不应该使用preg_match
,还是我不能以这种方式使用签名?
答案 0 :(得分:6)
您可以使用preg_match_all
并使用此修改后的regex
preg_match_all('/~~(.*?)~~/', $str, $matches);
<?php
$str="~~I-d0n't-us3-pr0p3r-ch@r@ct3r5~~";
preg_match_all('/~~(.*?)~~/', $str, $matches);
print_r($matches[1]);
<强> OUTPUT :
强>
Array
(
[0] => I-d0n't-us3-pr0p3r-ch@r@ct3r5
)
答案 1 :(得分:4)
这应该有效,但用户名不得包含~~
preg_match_all('!~~(.*?)~~!', $str, $matches);
<强>输出:强>
Array
(
[0] => Array
(
[0] => ~~timtj~~
[1] => ~~foobar~~
[2] => ~~totallylongusername~~
[3] => ~~I-d0n't-us3-pr0p3r-ch@r@ct3r5~~
)
[1] => Array
(
[0] => timtj
[1] => foobar
[2] => totallylongusername
[3] => I-d0n't-us3-pr0p3r-ch@r@ct3r5
)
)
第一个子数组包含完整匹配的字符串,其他子数组包含匹配的组。
您可以使用标记PREG_SET_ORDER
更改订单,请参阅http://php.net/preg_match_all#refsect1-function.preg-match-all-parameters
<?php
$str = "~~timtj~~ ~~foobar~~ ~~totallylongusername~~ ~~I-d0n't-us3-pr0p3r-ch@r@ct3r5~~";
preg_match_all("!~~(.*?)~~!", str, $matches, PREG_SET_ORDER);
print_r($matches);
此代码生成以下输出
Array
(
[0] => Array
(
[0] => ~~timtj~~
[1] => timtj
)
[1] => Array
(
[0] => ~~foobar~~
[1] => foobar
)
[2] => Array
(
[0] => ~~totallylongusername~~
[1] => totallylongusername
)
[3] => Array
(
[0] => ~~I-d0n't-us3-pr0p3r-ch@r@ct3r5~~
[1] => I-d0n't-us3-pr0p3r-ch@r@ct3r5
)
)