4

PHPスクリプトを使用してSlackスラッシュコマンドを作成しようとしています。

だから私が入力すると:

/save someurl.com "This is the caption"

その 1 つの文字列を 2 つの異なる変数に変換できます。

長い文字列は次のようになります。

https://someurl.com "This is the caption"

私はそれを次のように変えたい:

$url = https://someurl.com;
$caption = This is the caption;

ここでスタック オーバーフローを検索して、正規表現パターンをいくつか試してみましたが、何でも正しく動作させることができました。

どんな助けでも大歓迎です!

4

4 に答える 4

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

デモ

これは、1 つまたは複数の非空白文字 ( (\S+))、1 つまたは複数の空白文字 ( \s+)、 a "、1 つまたは複数の非貪欲な文字、次に別のに一致させることで機能し"ます。

于 2016-02-10T18:21:28.127 に答える
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
)
*/
于 2016-02-10T18:20:54.270 に答える
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"

?>
于 2016-02-10T18:29:39.603 に答える