PHP Regex将字符串解释为命令行属性/选项

时间:2016-02-28 17:37:02

标签: php regex

让我说我有一串

$Processed = [
    'title'=> 'Some PostTitle',
    'category'=> '2',
    ....
];

我一直在尝试做的是将此字符串转换为动作,字符串非常易读,我想要实现的是使发布更容易,而不是每次导航到新页面时间。现在我对这些动作如何工作没关系,但是我已经尝试过多次尝试按照我想要的方式处理它,我很简单想要将属性(选项)后的值放入数组中,或者简单地提取值然后就像我想要的那样处理它们。

上面的字符串应该给我一组keys =>值,例如

 /\-(\w*)\=?(.+)?/

获取这样的已处理数据是我正在寻找的。

我一直试图为此写一个正则表达式,但没有希望。

例如:

$AllowedOptions = ['-title','-category',...];

应该接近我想要的东西。

注意标题和日期中的空格,并且某些值也可以有破折号,也许我可以添加允许属性列表

{{1}}

我只是不擅长这一点,并希望得到你的帮助!

赞赏!

1 个答案:

答案 0 :(得分:4)

您可以使用此基于前瞻性的正则表达式来匹配您的名称 - 值对:

/-(\S+)\h+(.*?(?=\h+-|$))/

RegEx Demo

RegEx分手:

-                # match a literal hyphen
(\S+)            # match 1 or more of any non-whitespace char and capture it as group #1
\h+              # match 1 or more of any horizontal whitespace char
(                # capture group #2 start
   .*?           # match 0 or more of any char (non-greedy)
   (?=\h+-|$)    # lookahead to assert next char is 1+ space and - or it is end of line
)                # capture group #2 end

PHP代码:

$str = 'Insert Post -title Some PostTitle -category 2 -date-posted 2013-02:02 10:10:10';
if (preg_match_all('/-(\S+)\h+(.*?(?=\h+-|$))/', $str, $m)) {
   $output = array_combine ( $m[1], $m[2] );
   print_r($output);
}

<强>输出:

Array
(
    [title] => Some PostTitle
    [category] => 2
    [date-posted] => 2013-02:02 10:10:10
)