【问题标题】:How to match any non white space character except a particular one?如何匹配除特定字符之外的任何非空白字符?
【发布时间】:2011-09-01 18:40:08
【问题描述】:

在 Perl 中,\S 匹配任何非空白字符。

如何匹配除反斜杠 \ 之外的任何非空白字符?

【问题讨论】:

    标签: regex perl


    【解决方案1】:

    您可以使用前瞻:

    /(?=\S)[^\\]/
    

    【讨论】:

    • 如果不是空格则向前看。然后否定类接受除您类中的字符之外的任何内容(不是空格)。
    • 我喜欢这个解决方案。这对于“给我除空格之外的所有非单词字符”之类的东西很有用:/(?=\S)\W/
    • 我遇到了一种情况,我需要匹配任何非空白字符以及非引号。它还必须允许空间。例如:THIS IS A TEST, AND AGAIN。以下内容对我很有效(?=\S)[^"]*
    • 接受的答案对我不起作用,但确实如此。我在崇高的文本正则表达式搜索中使用它
    • 我正在搜索如何选择任何非 Word 字符,但她是 /(?=\W)[^-]/g
    【解决方案2】:

    您可以使用character class

    /[^\s\\]/
    

    匹配任何不是空白字符也不是\ 的东西。这是另一个例子:

    [abc] 表示“匹配abc”; [^abc] 表示“匹配除abc 之外的任何字符”。

    【讨论】:

    • ^ 何时解释为否定,何时解释为行首?在这方面,为什么这不匹配以空格数$0~/\s*^\s/ 开头的行
    • 在字符类之外,它是“字符串的开头”(或行,取决于当前的匹配模式)。在字符类中,只有当它是左括号后的第一个字符时,才会否定字符类的内容。
    • 以下是否匹配以多个空格开头的行 $0~/\s*^\s/ 后跟任何不是空格的字符
    • 这应该是/^\s+/ - 行首,后跟一个或多个空白字符。
    • @AlexanderCska,你明白了吗?上面的答案只会返回字符串的第一个匹配项。如果您希望返回所有匹配项,请添加 g 修饰符。 /[^\s\\]/g
    【解决方案3】:

    这对我有用 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
    • 是的@AlanMoore 工作:echo "ghai ghai" | sed "s/[^[:space:]g]//g" 产量:g g
    【解决方案4】:

    在我的系统上: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:]]
    • X 我匹配“除了没有空格”[^[:space:]]

    这两个都不行:

    a[:space:]b  instead use a\sb or a[[:space:]]b
    
    a[^\s]b      instead use a[^[:space:]]b
    

    【讨论】:

    • 从 sed 4.4 开始,您必须使用 ([^[:space:]]) 而不是 ([^\s]) 显然仍然是正确的。我在 openSUSE Tumbleweed 2018 04 03。
    猜你喜欢
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    相关资源
    最近更新 更多