Regex 如何匹配除特定字符外的任何非空白字符?
在Perl中,S匹配任何非空白字符Regex 如何匹配除特定字符外的任何非空白字符?,regex,perl,Regex,Perl,在Perl中,S匹配任何非空白字符 如何匹配除反斜杠以外的任何非空白字符?您可以使用前瞻: /(?=\S)[^\\]/ 您可以使用: 匹配不是空白字符或\的任何内容。下面是另一个例子: [abc]表示“匹配a、b或c”[^abc]表示“匹配除a、b或c之外的任何字符”这对我使用sed[编辑:下面的注释指出sed不支持\s] [^ ] 当 没有 # Delete everything except space and 'g' echo "ghai ghai" | sed "s/[^\sg]//
如何匹配除反斜杠以外的任何非空白字符?您可以使用前瞻:
/(?=\S)[^\\]/
您可以使用:
匹配不是空白字符或\
的任何内容。下面是另一个例子:
[abc]
表示“匹配a
、b
或c
”[^abc]
表示“匹配除a
、b
或c
之外的任何字符”这对我使用sed[编辑:下面的注释指出sed不支持\s]
[^ ]
当
没有
# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg
echo "ghai ghai" | sed "s/[^ g]//g"
g g
在我的系统上:CentOS 5
我可以在集合外部使用\s
,但必须在集合内部使用[:space:][/code>。事实上,我只能在集合中使用[:space://code>。因此,要使用它匹配单个空格,我必须使用[:space:]
这真的很奇怪
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
- 我匹配的第一个空格
\s
- 第二个空格与
[:space:]
- X I与“除空格外的所有空格”匹配
[^[:space:]
这两种方法都行不通:
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b
如果它不是一个空间,它会向前看。然后否定类接受除类中的字符以外的任何东西(不是空格)。我喜欢这个解决方案。它适用于“给我除空格以外的所有非单词字符”:/(?=\s)\W/
我遇到过需要匹配任何非空格字符和非引号的情况。它还必须留出空间。例:这是一个测试,同样
。以下内容对我很有效(?=\S)[^”]*
。被接受的答案对我不起作用,但这确实起了作用。我在sublime text regex searchI中使用了它,搜索如何选择除-和她之外的任何非单词字符(?=\W)[^-]/g
\s
不仅仅匹配空格字符。它包括制表符、换行符回车符和其他字符(其他字符的数量取决于正则表达式的风格)。它是Perl发明,最初是POSIX字符类的缩写[:space:]
,在sed
中不受支持。您上面的第一个正则表达式应该是s/[^[:space:]g]//g
。Yup@Alanmore工作:echo“ghai-ghai”| sed“s/[^[:space:]g///g”
产生:g
从sed 4.4开始,显然您仍然必须使用([^[:space:])
)。我在openSUSE Tumbleweed 2018 04 03上。^
什么时候被解释为否定,什么时候被解释为行开始?在这方面,为什么它不匹配字符类之外以空格数开头的行,它是“字符串的开始”(或行,取决于当前的匹配模式)。在字符类中,仅当它是开头括号后的第一个字符时,它才会否定字符类的内容。以下行是否匹配以大量空格开头的行$0~/\s*^\s/
,后跟任何可能应该是/^\s+//code>的非空格字符-行的开头,后跟一个或多个空格字符。@AlexanderCska,你找到答案了吗?上面的答案只返回字符串的第一个匹配项。如果你想返回所有匹配项,请添加g
修饰符。/[^\s\\\]/g
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b