【发布时间】:2017-03-19 19:38:18
【问题描述】:
我想匹配 string1 以及以下行中出现的任何内容:
['string1','string2','string3']
['string1' , 'string2' , 'string3']
['string1.domain.com' , 'string2.domain.com' , 'string3.domain.com']
['string1.domain.com:8080' , 'string2.domain.com:8080' , 'string3.domain.com:8080']
直到遇到以下情况:
string2
因此,在上述 4 种情况下使用正确的正则表达式,粗体的结果将匹配:
['string1','string2','string3']
['string1','string2','string3']
['string1.domain.com' , 'string2.domain.com' , 'string3.domain.com']
['string1.domain.com:8080' , 'string2.domain.com:8080' , 'string3.domain.com:8080']
我尝试使用以下线程来解决https://regex101.com/ 的问题
我尝试的正则表达式来自Question 8020848,但未能正确匹配字符串:
((^|\.lpdomain\.com:8080' , ')(string1))+$
但是我只匹配了我想要在本文中匹配的部分并不成功:
['string1.domain.com:8080' , 'string2.domain.com:8080' , 'string3.domain.com:8080']
以下是我使用您建议的正则表达式收到的内容
@@ -108,7 +108,7 @@ node stringA, stringB, stringC,stringD inherits default {
'ssl_certificate_file' => 'test.domain.net_sha2_n.crt',
'ssl_certificate_key_file'=> 'test.domain.net_sha2.key' }
},
- service_upstream_members => ['string1.domain.com:8080', 'string2.domain.com:8080', 'string3.domain.com:8080', 'string4.domain.com:8080', 'string5.domain.com:8080'],
+ service_upstream_members => [ 'string2.domain.com:8080', 'string3.domain.com:8080', 'string4.domain.com:8080', 'string5.domain.com:8080'],
service2_upstream_members => ['string9:8080','string10:8080'],
service3_upstream_members => ['string11.domain.com:8080','string12.domain.com:8080','string13.domain.com:8080'],
service_name => 'test_web_nginx_z1',
如您所见,由于某种原因没有删除前面的空格,甚至 regex101.com 也证明所有空格都使用
在正则表达式中捕获'string1[^']*'\s*,\s*
这是我目前正在使用的(其中 server 是脚本中已经定义的变量)
sed -i '' "s/'${server}[^']*'\s*,\s*//"
【问题讨论】:
-
'string1[^']*'怎么样? -
好,但不包括空格。有几种组合可能是: ','string2 OR ' , 'string2 OR ', 'string2 需要它包括所有直到 ' 紧接在 string2 之前的所有内容
-
你的意思是你也需要空格+逗号+空格?
'string1[^']*'\s*,\s*? -
尝试将
\s替换为[[:space:]]。不确定它是否会有所帮助,我不是 Mac OSX 方面的专家,但是是的,据我所知是有区别的。 -
完成了这项工作。
标签: regex regex-greedy