Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何匹配除特定字符外的任何非空白字符?_Regex_Perl - Fatal编程技术网

Regex 如何匹配除特定字符外的任何非空白字符?

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]//

在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]//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