0

正規表現を使用してエスケープ文字を分析したい。

たとえば、文字列に文字(a)が含まれている場合、正規表現パターンは一致する必要がありますが、文字aの前にアポストロフィ('a)が付いている場合は一致しない必要があります。

例えば:

"a" --true、 "aba" --true、 "car" --true、 "foo" --false、 "c'ar" --false

ありがとう。

4

2 に答える 2

1

s が前にない sのみに一致させるには、否定後読みを使用します。a'

(?<!')a

警告: 一部の正規表現 (JavaScript、Ruby、Tcl)は後読みをサポートしていません

Javascriptで実行するソリューションが欲しい

次に、ボイラープレート リファレンスのMimicking Lookbehind in JavaScript を参照します。または、正規表現を使用せずに、自分で文字列をスキャンするだけです。これは非常に簡単で、後読みを模倣するどのバージョンよりもおそらく高速です。

function matches_a_not_preceded_by_apos(str)
{
    var found_an_a = false;
    for (var i=1; i<str.length; i++)
    {

        if (str.charAt(i) === "a")
        {
            found_an_a = true;
            if (str.charAt(i-1) === "'")
            {
                return false;
            }
        }
    }
    return found_an_a;
}
于 2013-02-08T04:01:09.980 に答える
0

次のパターンを使用できます。

(?<!\')a

これがデモです: http://regexr.com?33mue

(?<!\')は否定の後読みで、aが前にない場合に一致することを示し\'ます。

于 2013-02-08T04:04:02.100 に答える