|
1
377
无论是基本的还是扩展的Posix/GUN正则表达式都不能识别非贪婪量词;您需要稍后的正则表达式。幸运的是,在这种情况下,Perl正则表达式很容易获得:
|
|
|
2
217
|
|
|
3
107
使用sed,我通常通过搜索除分隔符之外的任何内容来实现非贪婪搜索,直到分隔符:
输出:
这是:
如果你想在域后也包含反斜杠,那么在组中再添加一个反斜杠以记住:
输出:
|
|
|
4
36
在中模拟懒惰(非贪婪)量词
|
|
5
25
sed不支持“非贪婪”运算符。 您必须使用“[]”运算符从匹配中排除“/”。
|
|
6
20
sed - non greedy matching by Christoph Sieghart 在sed中实现非贪婪匹配的诀窍是匹配除终止匹配的字符之外的所有字符。我知道,这很容易,但我浪费了宝贵的时间,毕竟shell脚本应该快速简单。所以,如果其他人可能需要它: 贪婪匹配
|
|
|
7
16
多个字符的非贪婪解决方案
这条线真的很旧,但我想人们仍然需要它。
假设你想杀死一切,直到第一次发生
当然,通过更简单的输入,你可以使用一个较小的单词,甚至一个字符。 嗨! |
|
|
8
14
这可以使用cut完成:
|
|
|
9
9
另一种不使用正则表达式的方法是使用字段/分隔符方法,例如
|
|
|
10
5
正如Dee所指出的:只要使用
正如你所看到的,这是一种更灵活的方法。 (全部归功于Dee) |
|
|
11
4
|
|
|
12
3
sed-E将正则表达式解释为扩展(现代)正则表达式
|
|
|
13
3
仍然有希望使用纯(GNU)sed来解决这个问题。尽管在某些情况下这不是一个通用的解决方案,但你可以使用“循环”来消除字符串中所有不必要的部分,如下所示:
这里唯一的问题是,它还会剪切最后一个分隔符(“/”),但如果你真的需要它,你仍然可以在“循环”完成后简单地将其放回原处,只需在上一个命令行的末尾附加这个额外的命令:
|
|
|
14
2
因为您明确表示要使用sed(而不是perl、cut等),所以请尝试分组。这避免了可能无法识别的非贪婪标识符。第一组是协议(即“http://”、“https://”、“tcp://”等)。第二组是域: echo "http://www.suon.co.uk/product/1/7/3/" | sed "s|^\(.*//\)\([^/]*\).*$|\1\2|" here . |
|
|
15
1
由于完整域名的总长度不得超过253个字符,请进行替换。*与\{1, 255\} |
|
|
16
1
这就是如何使用sed稳健地进行多字符串的非贪婪匹配。假设你想改变每一个
应该变成这个输出:
在上面:
|
|
|
17
0
这运行
我喜欢用
|
|
|
18
0
由于PCRE也标记在这里,我们可以使用GNU
说明:
使用
|
|
|
19
0
以下解决方案适用于匹配/处理多重存在(链式;串联式;复合式)HTML或其他标签。例如,我想编辑HTML代码以删除
问题:
解决方案: 非贪婪模式匹配(根据本线程其他地方的讨论;例如。 https://stackoverflow.com/a/46719361/1904943 ). 例子:
说明:
附录
我试图清理网址,但遇到了匹配/排除单词的困难-
我决定更换
示例 (为便于阅读,此处格式化):
说明: 基本上如上所述。在这里,
|
|
|
20
0
别担心,我在另一个论坛上得到的:) |
|
FutureCake · 正则表达式在数字序列之前匹配子字符串 8 年前 |
|
|
Paul Allsopp · Regex替换PHP类中的函数名 8 年前 |
|
|
HBasiri · Regex:匹配恶意ASP会话ID 8 年前 |