我试图使用PHP脚本制作Slack斜杠命令。
所以当我输入:
/save someurl.com "This is the caption"
我可以将一个字符串转换为两个不同的变量。
长字符串将以:
的形式出现https://someurl.com "This is the caption"
我希望能够将其变成:
$url = https://someurl.com;
$caption = This is the caption;
我已经尝试了之前在Stack Overflow上搜索的一些正则表达式模式,但可以使任何东西正常工作。
非常感谢任何帮助!
答案 0 :(得分:4)
如果您知道它将采用该格式,您可以使用以下内容:
(\S+)\s+"(.+?)"
示例代码:
$string = 'someurl.com "This is the caption"';
preg_match('~(\S+)\s+"(.+?)"~', $string, $matches);
var_dump(
$matches
);
输出:
array(3) {
[0] =>
string(33) "someurl.com "This is the caption""
[1] =>
string(11) "someurl.com"
[2] =>
string(19) "This is the caption"
}
这可以通过匹配一个或多个非空白字符((\S+)
),一个或多个空格字符(\s+
),"
,非{0}中的一个或多个字符来实现贪婪的时尚,然后是另一个"
。
答案 1 :(得分:2)
使用以下正则表达式
(.*?)\s"(.*?)"
然后使用匹配的组来获得你想要的东西。
示例:
$string = 'https://someurl.com "This is the caption"';
preg_match('/(.*?)\s"(.*?)"/', $string, $matches);
print_r($matches);
/* Output:
Array
(
[0] => https://someurl.com "This is the caption"
[1] => https://someurl.com
[2] => This is the caption
)
*/
答案 2 :(得分:0)
又一种方法:
<?php
$string = 'https://someurl.com "This is the caption"';
$regex = '~\s+(?=")~';
# looks for a whitespace where a double quote follows immediately
$parts = preg_split($regex, $string);
list($url, $caption) = preg_split($regex, $string);
echo "URL: $url, Caption: $caption";
// output: URL: https://someurl.com, Caption: "This is the caption"
?>
答案 3 :(得分:0)
我不使用Slack,但如果可以输入如下内容:
/save someurl.com "This is a \"quote\" in the caption"
导致这个长字符串:
https://someurl.com "This is a \"quote\" in the caption"
然后,寻找双引号的懒惰模式将失败。
无论如何,贪婪模式比懒惰模式更有效,所以我建议在所有情况下使用以下内容:
~(\S+) "(.+)"~
代码:(Demo)
$input = 'https://someurl.com "This is a \"quote\" in the caption"';
list($url, $caption)=(preg_match('~(\S+) "(.+)"~', $input, $out) ? array_slice($out,1) : ['','']);
echo "url: $url\ncaption: $caption";
输出:
url: https://someurl.com
caption: This is a \"quote\" in the caption