我想匹配 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个案例中使用正确的正则表达式时,粗体结果将匹配:
['的字符串1','字符串2'' STRING3']
['字符串1' ,' 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*
这就是我目前使用的(服务器是已在脚本中定义的变量)
sed -i '' "s/'${server}[^']*'\s*,\s*//"
答案 0 :(得分:1)
这应符合您的要求(根据您的粗体突出显示),允许未知数量的空格等。
(?:…)
是非捕获组
…+?
是非贪婪的匹配(尽可能少的 x )
<德尔> (string1.+?)(?:'string2)
德尔>
(string1.+?)'string2
答案 1 :(得分:1)
匹配以'
开头然后有string1
的字符串,然后是'
以外的任何字符,0或更多次出现,然后是可选的空格数,逗号和0 +空格,你可以使用
'string1[^']*'\s*,\s*
请参阅regex demo。
故障:
'string1
- 文字字符序列'string1
[^']*
- 除*
以外的零个或多个('
)字符(由于否定的字符类[^...]
)'
- 撇号\s*
- 0+ whitespaces ,
- 逗号\s*
- 0+空格。