【发布时间】:2017-04-24 01:12:07
【问题描述】:
我正在尝试使用 RegEx 组捕获来获取 bash CURL 命令的所有标头,但我遇到了一个问题,它只是抓取一组中的所有标头(以及我不完全了解的另一组)为什么会这样)。
狂欢:
curl '<url>' -H 'origin: <url>' -H 'accept-endocing: <...>' -H 'accept-language: <...>' <continues with more headers> --data '<...>'
它继续与其他标题。
代码:
var rawBash = RawBash.Text;
var headerPattern = @"\-H[\s][\']{1}(.+)[\']{1}";
var headers = Regex.Match(rawBash, headerPattern);
我有tested the pattern here,上面写着“11 个捕获”,“正确”表示我想要捕获的组,但是当我调试代码时,它表明捕获了 2 个组:
- 以第一个“-H”开头的整个 CURL
- 以“origin:”开头的整个 CURL
发生了什么事?我猜正则表达式正在使用(.+),并且在遇到[\']{1} 时不会终止,因为' 与(.+) 匹配...但是如何让它捕获组中的每个单独的标头?
我已尝试通读一些 C# RegEx 教程/说明,但我无法找到我正在寻找的内容(或以正确的措辞描述我正在寻找的内容)。
编辑:在发帖几秒钟后,我有了尝试这种模式的想法:
var headerPattern = @"\-H[\s][\']{1}([^\']+)[\']{1}";
请注意,该组现在是 ([^\']+),而不是 (.+)。它现在可以按我的意愿工作了。
另外,我使用的是Regex.Match(...),应该是Regex.Matches(...) 来获取所有匹配项。
但我想这个问题仍然存在;有人如何在某个时候终止组捕获?我记得一个朋友在我认为类似的情况下使用了 forward lookup 这个词,但我不知道如何实现。
【问题讨论】:
标签: c# regex regex-group