左端のシンボルと右端のシンボルが同じになるように文字列を一致させようとしています。それ、どうやったら出来るの?perlの右端と左端のシンボルと正規表現の一致
答えて
それはあなたが「シンボル」と考えるものの明確化せずに意味内容を正確に把握することは不可能だが、ここでは一つの可能な解決策は以下のとおりです。
use Unicode::Normalize;
NFD($string) =~/\A \s* ((?= \p{Grapheme_Base}) \X) .* \1 \s* \z /sx;
、ここでは別です:
use Unicode::Normalize;
NFD($string) =~/\A \s* ((?= \p{Symbol}) \X) .* \1 \s* \z /sx;
とここにもう1つあります:
use Unicode::Normalize;
NFD($string) =~/\A \s* ((?: (?= \p{Symbol}) \X)+) .* \1 \s* \z /sx;
そして、あなたが非常に限られた状況はと離れて取得することができ:
$string =~/^ (\pS) .* \1 $ /xs;
しかし、あなたがしなければ、それはいつかあなたがより慎重になっていた希望するつもりだということも考えられます。
ありがとうございます。私は試してみましょう。それが役立つように見えます。 – gzg
なぜこれを正規表現で使いたいのですか?宿題ですか?私はこのような簡単なパターンの正規表現を避ける。トムは書記素対文字文句ますので
use Unicode::Normalize qw(NFC);
$s = NFC($s);
substr($s, 0, 1) eq substr($s, -1, 1);
、あなたもそれを処理することができます:長さ1と大きいと
use v5.10.1;
use Unicode::GCString;
use Unicode::Normalize qw(NFC);
my $gcs = Unicode::GCString->new(NFC($s));
$gcs->substr(0, 1) eq $gcs->substr(-1, 1)
'$ gcs-> substr(0,1)'と '$ gcs-> substr(-1,1)'がほしいと確信しています。そして、問題があっても、両辺が最初に同じ形式に正規化されないと、それが必ずしも機能しないからです。さて、あなたは 'Unicode :: Collate-> new-> eq($ gcs-> substr(0,1)、$ gcs-> substr(-1,1))'と呼ぶことができますが、 ;最初に正規化するのが最善です。 - しかし、大部分は、空白や制御文字、孤立したマークではなく、空白に耐えられるように、適切な印刷文字を得ることが大抵でした。 – tchrist
はい、常に正規化してください。 IO層を作るというあなたの提案には何が起こったのですか?(メールで話したことがありましたか?) –
いいえ、 ' - > as_string'を使うことはできません。 '" \ x {305} xxx b \ x {305} "'コードポイントで動作する 'substr'関数ではなく、graphemesで動作する実際の' - > substr'メソッドを使用する必要があります。 - 私はp5pのI/Oレイヤーのことをある程度前に言及しているかもしれません。私は思い出しません。私は、前処理と後処理のために二重バックグラウンドフォークを使ってこれをシミュレートしたコードを送ったと思います。 – tchrist
これらの正規表現のマッチ文字列。式では、(.)
はキャプチャグループを表しています。このグループでは、私の推測するシンボルのクラスでドットを置き換える必要があります(Unicode Guruの記事を参照してください)。
この正規表現の文脈は一行(/s
修飾語)です。それはドットが 改行だけでなく、他のもの(例えば[\s\S]
)と一致するようにします。改行を組み込み、最も外側の区切り文字にすることができます。 \z
は、(文字列の最後にマッチがよりcommonaある)$
が改行前に一致する可能性がシナリオを補正以外\z
を使用
は、(/s
モード)$
と同じです。問題の文字が改行であり、貪欲でない量指定子(.*?
など)を使用していて、ターゲット文字列が "\ nasdf \ n \ n"の場合、最終改行の前に偽りに一致する可能性があります。しかし、それは試合がすべて貪欲であるため、根本的な問題である。それでも、笑いのためにそれを残す。
/^(?=(.)).*\1\z/s
が
/^(?=(\w)).*\1\z/s
ちょうど単語クラスの文字を規定
/
^ # Beginning of string
(?=(.)) # Lookahead - capture grp1, first (any) character (but don't consume it)
.* # Optionally consume all the characters up until before the last character
\1 # Backreference to capture grp1, this must exist
\z # End of string
/s # s modifier
例を拡大して再度、単に「シンボル」を定義し
'/ s'は' $ 'アンカーに影響しません。あなたは '/ m'について考えています。 '/ s'は単にaを許可します。改行にマッチするしかし、デフォルトの '/ m'は、論理行の先頭に'^'をマッチさせるので、Tomは代わりに' \ A'を使います。 '\ w'は英数字以上にもマッチします。これは任意の識別子文字です。 –
@brian Dのフォイ - (、/^differnt効果の/^(?=(.)).*\1$/の、/^(?=(.)).*?\1$/sを説明しましたか? =(。))。* \ 1 $/s、/^(?=(.)).*?\1\z/s、/^(?=(.)).*\1\z/s when '\ n'、' \ n \ n'、または '\ n \ n \ n'のターゲット文字列にマッチします。 '\ n'が選択可能な文字でない場合はその疑問があります。私は頭を上げてくれたので、より広い規定として '/ ^(?=([^ \ W _]))。* \ 1 \ z/s'を使用することができたと思います。そして、私のために私の投稿をハイライトしてくれてありがとう。 – sln
- 1. Perlの正規表現と一致する絵文字
- 2. このperl正規表現は何と一致しますか?
- 3. sed/perlで非貪欲な正規表現と一致する
- 4. 変数として一致Perl正規表現を保存
- 5. climの正規表現と一致するときのvim/perlの挿入行
- 6. 正規表現と一致するコードコメント
- 7. 正規表現での正規表現の一致値
- 8. 正規表現一致
- 9. 文字列または正規表現のリテラルにない正規表現と一致する正規表現
- 10. 右端値から左端値への変換Visual Studio
- 11. イメージタグのリンクと正規表現との一致方法
- 12. 複数の正規表現の一致
- 13. ファイル名の一致の正規表現
- 14. JavaScriptでの正規表現の一致
- 15. 正規表現の一致の抽出?
- 16. 正規表現と一致しない正規表現ですか?
- 17. Perl互換の正規表現「」スペースと 『(』 『)』
- 18. Perlの分割と正規表現
- 19. 部分正規表現の一致
- 20. 正規表現n番目の一致
- 21. C#正規表現の一致
- 22. PCRE正規表現の重複一致
- 23. 正規表現 - 複数の一致
- 24. 正規表現:URIのドメイン一致
- 25. C#正規表現のオプション一致
- 26. 正規表現に一致する正規表現
- 27. 正規表現に一致する正規表現
- 28. 左に右と左を代用する正規表現が必要です
- 29. jQueryは要素の内側の左端が要素内の右端と一致するときに見つけます
- 30. のAwk - 終端されていない正規表現
あなたの許容可能な記号に置き換えてください。 – tchrist
@tchrist、任意の英数字。私は正式な答えがほしいと思った。私は表現を自分で作ることができます。 – gzg
シンボルは '\ pS'です。文字は '\ pL'です。数字は '\ pN'です。アルファベットは '\ p {alpha}'であり、さまざまな記号や記号が含まれており、特定の数字は除外されています。私はあなたに正式な答えを与えました。 – tchrist