0

パラメータとして 2 つの文字列を使用(s1, s2)すると、new Regex(my_regular_expression(s1, s2)). たとえば、s1="abcd", s2="xyz" 文字列を一致させたい:

regex.IsMatched(x)==true、x は次のいずれかです。

abcd.xyz
abcd-xyz
xyzabcd
dxy
yzab
z a
dx
cd
but not limited to

ただしregex.IsMatched(y)==false、y は次のいずれかです。

aabcd.xyzv
abd.xyz
xycd
but not limited to

s1 と s2 の間には、何もないか、または任意の文字が存在する可能性があります。string.right(string str,int length)s2の左部分文字列 (関数 を参照) と連結された s1の右部分文字列 (関数を参照string.left(string str,int length))、または s1 の左部分文字列と連結された s2 の右部分文字列。

abcd、xyzではなく、正規表現でs1とs2を使用してください。s1/s2 には特殊文字を含めることができます。

前もって感謝します。

4

2 に答える 2

1

Combined希望の表現ができると思います。以下の制限があります。

  • 現在、文字であっても、任意の文字が 2 つの半分 (例では.or -) を組み合わせることができます。
  • SuffixPart単一の UTF-16 コード ポイントに収まらない Unicode 文字はサポートされません。このエッジ ケースを処理する必要がある場合は、Java コードに関する関連する質問を次に示します
  • PrefixPartさらに言えば、単一の UTF-16 コード ポイントではない Unicode 文字もサポートしていませんが、そのメソッドは「ひどく」壊れていません。

コードは次のとおりです。

public static string PrefixPart(string str)
{
    return
        string.Join("(?:", str.Select(i => Regex.Escape(i.ToString())))
        + string.Join(")?", Enumerable.Repeat(string.Empty, str.Length));
}

public static string SuffixPart(string str)
{
    return PrefixPart(new string(str.Reverse().ToArray()));
}

public static string Combined(string str1, string str2)
{
    string left = SuffixPart(str1) + ".?" + PrefixPart(str2);
    string right = SuffixPart(str2) + ".?" + PrefixPart(str1);
    return string.Format("^{0}|{1}$", left, right);
}
于 2013-03-21T20:21:08.450 に答える
0

私はただするだろう

"/" + s1 + ".?" + s2 + "|" + s2 + ".?" + s1 + "/"

これは(あなたの例では)次のように評価されます:

/abcd.?xyz|xyz.?abcd/

これは両方とも、ゼロまたは任意の文字の 1 つで区切られたいずれかの順序で必要なパターンです。

于 2013-03-20T13:53:46.787 に答える