如何在一个模式中包含两个模式?

时间:2018-09-19 15:39:51

标签: regex bash

样本输入

outer

示例输出

test_fun_vec = 
 Vectorize(
   function(x,y) {
     outer(
       x,
       y,
       test_fun
       )
   }
 )
test_fun_vec(a_mtx,b_mtx)
#[1]  4  0  2  7  4  6  3  5  1  5  7  5 10  0  9 11 15 17  8 11  9 12 10 16
#[25] 10 22 20 25 15 24

在这里instanceFromRest应该返回{{"access_token":"00D7F00000027wN!****.*****gIr2J3.*********","instance_url":"https://nagesingh-dev-ed.my.salesforce.com","id":"https://login.salesforce.com/id/00D7F00000027wNUAQ/****","token_type":"Bearer","issued_at":"1537367467287","signature":"nl1tdrQ+TY64fi068KPOKGrmHf4IU3E/*****="}}

在使用pattern='"access_token":"([^"]*)"' if [[ $response =~ $pattern ]]; then access_token="${BASH_REMATCH[1]}" instanceFromRest="${BASH_REMATCH[2]}" echo "instance is now ${instanceFromRest}" #uncomment to check token results echo "token: ${access_token}" 时,我也想在模式中包含https://nagesingh-dev-ed.my.salesforce.com,以便我也可以获取BASH_REMATCH并获取instance_url吗? 我知道instance_url的模式将与access_token相同,但是如何将其包含在同一模式中,以便可以执行instance_url并获取第二个参数?

${BASH_REMATCH[2]}

1 个答案:

答案 0 :(得分:0)

使用当前的方法,您可能只获得两个匹配组的单场比赛:

pattern='"access_token":"([^"]*).*"instance_url":"([^"]*)'
                         ^^^^^^^                  ^^^^^^^

请注意.*匹配模式两部分之间的任何0+字符。

在比赛中,${BASH_REMATCH[1]}将保留access_token值,而${BASH_REMATCH[2]}将保留instanceFromRest值。

请参见online demo