3

私は正規表現の初心者です。私はそれらを読んでいますが、「-」記号が何を意味するのかさえわからないので、まだよくわかりません. サンプル 1 を作成して、手順を説明してもらえますか? これをどうするか?

忙しい猫

基本的に、この構文は文字列を逆に追加したものです。

これは一致するはずです:

abccba
bCaaCb

これは一致しないはずです:

lebronnorBeL
bcAacb

ご助力ありがとうございます!

4

2 に答える 2

1

私が知る限り、正規表現はそのようなパターンでは機能しません。

私の回避策は次のようになります。

private bool isMirrorLikeString(string content) {
    for (int i = 0; i < (int)(content.Length / 2); i++) {
        if (content[i] != content[content.Length - 1 - i]) return false;
    }
    return true;
}
于 2015-04-23T23:43:29.913 に答える
0

理論的には、質問の言語は文脈自由であるため、正規表現では記述できません。ただし、言語とライブラリの正規表現エンジンには、理論上の正規表現よりも強力な機能が導入されています。

この場合、文字列の全長が常に偶数であることを除いて、単に回文文字列を検出するよう求めているだけです。

この回答から正規表現を取得して変更できます。

(?<N>[01])+(?<-N>\k<N>)+(?(N)(?!))

.?奇数長の回文を可能にする部分を削除し、質問に合うように.内部を変更します)(?<N>.)

  • (?<N>[01])+キャラクターをキャプチャして「スタック」にプッシュしますN
  • (?<-N>\k<N>)+スタックの一番上にあるアイテムが現在の文字と一致する場合、「スタック」からポップしますN( に注意してください( 、これはグループ N をキャプチャする通常の後方参照です)。<-N>\k<N>
  • (?(N)(?!))stack に何か残っている場合はN、失敗してバックトラックすることを確認します。

.NET のバランシング グループ機能により、この正規表現は .NET エンジンに固有のものであることに注意してください。Perl と PCRE も質問の言語と一致しますが、機能 (ルーチン呼び出し) が異なります。

于 2015-04-24T08:04:48.053 に答える