1

我目前使用以下正则表达式(在 PHP 中):

preg_match_all('/\s+?[-]{3,}\s(POST|GET|PUT|DELETE)\s([\/A-Za-z\-_{}]*)\s+(.*)\s+[-]{3,}\s+/ism',$text, $m, PREG_SET_ORDER)

基本上,它工作正常,但由于 (.*),它与第一项的内容和第二项的内容都匹配。我尝试了多种方法,但无法将以下字符串识别为两个匹配项而不是一个匹配项。

----
POST /users/{user-id}/relationship

Modify the relationship between the current user and the target user. 
*Required scope: relationships*

### Parameters
- access_token: A valid access token.
- action: One of follow/unfollow/block/unblock/approve/deny.

### Example response
```
    {
        "meta": {
            "code": 200
        }, 
        "data": {
            "outgoing_status": "requested"
        }
    }
```

----

----
GET /users/{user-id}/relationship

Modify the relationship between the current user and the target user. 
*Required scope: relationships*

### Parameters
- access_token: A valid access token.

----

有人知道如何实现这一目标吗?谢谢。

更新:请原谅我不够清楚。我想匹配 Markdown 水平分隔符 (----) 之间的所有内容,以便它们形成两个块,它们都是 API 方法描述。

4

1 回答 1

2

尝试通过替换使其不贪婪:

.*

.*?

更新:再次检查您的正则表达式后,我不得不再做一些更正,现在以下对我有用:

preg_match_all('#\s*-{3,}\s(?:POST|GET|PUT|DELETE)\s(?:[\w/{}-]*)\s+(.*?)\s+-{3,}\s*#is',
                $str, $m, PREG_SET_ORDER);
于 2013-07-19T19:19:49.727 回答