【发布时间】:2011-09-01 18:40:08
【问题描述】:
在 Perl 中,\S 匹配任何非空白字符。
如何匹配除反斜杠 \ 之外的任何非空白字符?
【问题讨论】:
在 Perl 中,\S 匹配任何非空白字符。
如何匹配除反斜杠 \ 之外的任何非空白字符?
【问题讨论】:
您可以使用前瞻:
/(?=\S)[^\\]/
【讨论】:
/(?=\S)\W/
THIS IS A TEST, AND AGAIN。以下内容对我很有效(?=\S)[^"]*。
/(?=\W)[^-]/g
您可以使用character class:
/[^\s\\]/
匹配任何不是空白字符也不是\ 的东西。这是另一个例子:
[abc] 表示“匹配a、b 或c”; [^abc] 表示“匹配除a、b 或c 之外的任何字符”。
【讨论】:
^ 何时解释为否定,何时解释为行首?在这方面,为什么这不匹配以空格数$0~/\s*^\s/ 开头的行
$0~/\s*^\s/ 后跟任何不是空格的字符
/^\s+/ - 行首,后跟一个或多个空白字符。
g 修饰符。 /[^\s\\]/g
这对我有用 sed [编辑: 下面的评论指出 sed 不支持 \s]
[^ ]
同时
[^\s]
没有
# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg
echo "ghai ghai" | sed "s/[^ g]//g"
g g
【讨论】:
\s 不仅匹配空格字符。它包括 TAB、换行回车和其他(多少其他取决于正则表达式的风格)。这是一项 Perl 发明,最初是 POSIX 字符类 [:space:] 的简写,在 sed 中不受支持。你上面的第一个正则表达式应该是s/[^[:space:]g]//g。
echo "ghai ghai" | sed "s/[^[:space:]g]//g" 产量:g g
在我的系统上:CentOS 5
我可以在集合之外使用\s,但必须在集合内部使用[:space:]。事实上,我只能在集合内使用[:space:]。所以要使用这个匹配一个空格,我必须使用[[:space:]]
这真的很奇怪。
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
\s
[[:space:]]
[^[:space:]]
这两个都不行:
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b
【讨论】:
([^[:space:]]) 而不是 ([^\s]) 显然仍然是正确的。我在 openSUSE Tumbleweed 2018 04 03。