使用正则表达式获取两个不同字符之间的字符串

时间:2015-09-17 14:15:02

标签: regex

我正在努力为以下字符串找到正确的语法:

^Lorem/ipsum dolor sit/amet consectetur adipiscing/elit

在这里,我想在第一个^之后的// 之间提取第一个单词。即:Loremipsum

此外,如果我想在第二个/之后提取单词,如何更改语法?这将是amet

2 个答案:

答案 0 :(得分:1)

分为两部分:

  1. 首先,您希望在^之后和/之前匹配所有内容:

    /\^([^\/]*)/

    • \^字面匹配字符^
    • 第一个捕获小组([^\/]*)
      • [^\/]匹配下面列表中不存在的单个字符
      • 量词:*在零和无限次之间,尽可能多次,根据需要回馈[贪婪]
    • \/匹配字符/字面
  2. 其次,您希望在/之后匹配每个单词:

    /\/([^\s\/]*)/g

    • \/字面匹配字符/
    • 第一个捕获小组([^\s\/]*)
      • [^\s\/]匹配下面列表中不存在的单个字符
      • 量词:*在零和无限次之间,尽可能多次,根据需要回馈[贪婪]
      • \s匹配任何空格字符[\r\n\t\f ]
      • \/字面匹配字符/
    • g修饰符:全局。所有比赛(首场比赛时不返回)
  3. 代码(PHP):

    $str = "^Lorem/ipsum dolor sit/amet consectetur adipiscing/elit"; 
    
    // Part one:
    preg_match("/\\^([^\\/]*)/", $str, $matches);
    
    $matches[1] == 'Lorem'; // True    
    
    // Part two:
    preg_match_all("/\\/([^\\s\\/]*)/", $str, $matches); 
    
    $matches[1] == 'ipsum';
    $matches[2] == 'amet';
    $matches[3] == 'elit';
    

    来自精彩工具regex101的代码和解释。

答案 1 :(得分:0)

2个单词位于捕获组1和2中。Regex101

\^(\w+)\/(\w+)

如果您想捕获amet,请使用此选项:

\^(\w+)\/.+?\/(\w+)