如何在匹配时排除字符序列

时间:2011-01-19 22:24:50

标签: regex

正则表达式中是否存在某种转义序列或字符,指定不应在模式中的此处找到特定字符?

例如,如果我想匹配一个字符串,该字符串具有C风格的转义序列但不是文字反斜杠的特定转义序列(应该匹配"Hello\tWorld"而不是"Hello\\World")那么我该怎么写正则表达式,以便它匹配任何'\'但不是如果只跟着另一个'\'?

感谢。

3 个答案:

答案 0 :(得分:1)

由于您没有指定语言,因此这是一个执行此任务的perl脚本:

#!/usr/bin/perl
use strict;
use warnings;
use 5.10.1;

my @l = ("Hello\tWorld", "Hello\\World");

for(@l) {
  say /^.*?\\(?!\\).*$/ ? "$_ -> KO" : "$_ -> OK";
}

<强>输出:

Hello   World -> OK
Hello\World -> KO

<强>解释

/       : start regex
^       : begining of the line
  .*?   : any number of any char (not greedy)
  \\    : backslash
  (?!   : negative look ahead
    \\  : backslash
  )     : end of negative look ahead
  .*    : any number of any char
$       : end of line
/

答案 1 :(得分:0)

在大多数正则表达式语法中,您可以使用^定义反向字符类,例如除了[^a]之外,a匹配任何内容。

答案 2 :(得分:0)

我认为几分钟前刚问过一个非常相似的问题,请查看它是否对您有所帮助:PHP regex to find non-espaced letters

来自链接的正则表达式:(?<!\\\)F

可能的正则表达式:(?<!\\\)[tnr]匹配\ n,\ t或\ r \ n