PHP - 尝试仅在引号

时间:2016-02-10 18:17:06

标签: php regex slack

我试图使用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上搜索的一些正则表达式模式,但可以使任何东西正常工作。

非常感谢任何帮助!

4 个答案:

答案 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"
}

Demo

这可以通过匹配一个或多个非空白字符((\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