私は正規表現の初心者です。私はそれらを読んでいますが、「-」記号が何を意味するのかさえわからないので、まだよくわかりません. サンプル 1 を作成して、手順を説明してもらえますか? これをどうするか?
基本的に、この構文は文字列を逆に追加したものです。
これは一致するはずです:
abccba
bCaaCb
これは一致しないはずです:
lebronnorBeL
bcAacb
ご助力ありがとうございます!
私は正規表現の初心者です。私はそれらを読んでいますが、「-」記号が何を意味するのかさえわからないので、まだよくわかりません. サンプル 1 を作成して、手順を説明してもらえますか? これをどうするか?
基本的に、この構文は文字列を逆に追加したものです。
これは一致するはずです:
abccba
bCaaCb
これは一致しないはずです:
lebronnorBeL
bcAacb
ご助力ありがとうございます!
私が知る限り、正規表現はそのようなパターンでは機能しません。
私の回避策は次のようになります。
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;
}
理論的には、質問の言語は文脈自由であるため、正規表現では記述できません。ただし、言語とライブラリの正規表現エンジンには、理論上の正規表現よりも強力な機能が導入されています。
この場合、文字列の全長が常に偶数であることを除いて、単に回文文字列を検出するよう求めているだけです。
この回答から正規表現を取得して変更できます。
(?<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 も質問の言語と一致しますが、機能 (ルーチン呼び出し) が異なります。