とbeginend
が両方ともオプションの文字列を考えると、文字列全体と後方参照のみを一致させたいと思います。不明ですが、英数字です。文字通りです。どうすればこれを行うことができますか?begin
end
begin
Begin
end
end
問題がある場合は、Textpad マクロでこれを使用して、「beginend」を「begin」を含む別のものに置き換えます。
とbeginend
が両方ともオプションの文字列を考えると、文字列全体と後方参照のみを一致させたいと思います。不明ですが、英数字です。文字通りです。どうすればこれを行うことができますか?begin
end
begin
Begin
end
end
問題がある場合は、Textpad マクロでこれを使用して、「beginend」を「begin」を含む別のものに置き換えます。
前向きな先読みを使用してみてください。これはゼロ幅のアサーションであるため、一致には含まれません。end
また、英数字の文字列内に部分文字列を含めることもできます
([a-z0-9]*)(?=end)
これが言っていることは次のとおりです。英数字の文字列は、直後に続く場合にのみ一致します。end
「end」を含まない「英数字」文字の文字列を照合するには、次のように使用できます。
(?:(?!end)[A-Za-z\d])+
このような表現はあなたが求めることをするでしょう:
^((?:(?!end)[A-Za-z0-9])+)(?:end)?\z
編集済み(ブロック引用の後に参照)
私はコメント権限を持っていないので、彼の解決策についてコメントすることはできませんが、Qtax の解決策は機能しません。
begin
これは、部分文字列「end」が決して含まれないことを前提としているためです。たとえば、文字列「sendingend」とは一致しません。私の解決策:
^([A-Za-z0-9]*)(?:end)?$
もちろん、alphanumericの意味にも依存します。私の例は最も厳密な定義、つまり大文字と小文字と数字だけです。必要に応じて、他の文字を追加する必要があります。これらの文字だけでなくアンダースコアも含めたい場合は、かさばる全体
[A-Za-z0-9]
を\w
(と同等[A-Za-z0-9_]
) に置き換えることができます。\s
空白が必要な場合は追加します。あなたの正規表現の知識は限られていると言ったので、残りの解決策をあなたと他の人に説明します。
^
および$
文字列の先頭と末尾にそれぞれ一致します。特にを含めること$
で、遭遇する最後の「終わり」が本当に最後にあることを保証します。たとえば、それらがなくても、文字列「sendingsending」と一致し、プログラムの残りの部分は、最後に「end」が見つかったと見なします。これらの場合でも、任意の文字が許可されているため (以下を参照)、「sendingsending」と一致しますが、スクリプト内の他のステップでは「end」の存在が認識されます。([A-Za-z0-9]*)
「end」が存在しない場合、 は文字列全体をキャプチャするため、この現在の文字列では実際にはあまり問題になりません。でも、(end)$
それを見つけるために。([A-Za-z0-9]*)
: 角括弧には、許可されている特定の文字が含まれています (わからない場合は、これを必ず読んでください)。これ*
は、これらの文字の 1 つに 0 回以上一致することを意味するため、文字列なし (つまり、"end" のみ) だけでなく、非常に長い文字列も使用できます。括弧はそのパターンをキャプチャしているため、逆参照できます。(?:end)?
: 最後?
は、このパターンに 0 回または 1 回一致させます (つまり、オプションにします)。この(?:string)
構造により、括弧を使用する場合と同じように文字をグループ化できますが、そのパターンは保存されないため、メモリの使用量が少なくなり?:
ます。あなたの場合、そのメモリはごくわずかですが、将来の使用のために知っておくと便利です。さらにヘルプが必要な場合は、Google の「regex」を試してください。良い参考書がたくさんあります。それらをテストすることもできます。個人的にお気に入りのテスターはMy Regex Testerです。
幸運を!
TextPad マクロを検索しようとしましたが、問題が発生する可能性があります。上で説明したように、文字列の末尾に「end」があることを確認するには、別のものが必要になります。IF THEN をELSE(end)$
に置き換えて文字列全体を使用するような、ある種の条件を想定していました。^([A-Za-z0-9]*)(?:end)?$
ただし、これらのマクロでそれができるかどうかはわかりません...私は TextPad ユーザーではなく、ドキュメントがほとんどないため、言うのは難しいです。それができないのであれば、何らかの制限を設ける必要があると思います。1 つのアイデアは、"end" がbegin
部分文字列 (これが Qtax のソリューションで行われた方法です)。しかし今、私は疑問に思っています...「終了」がオプションになる場合、および条件が許可されない場合、それを使用する意味は何ですか? ……考えすぎなのかもしれません。私はあなたの返事を待ちます。