1

beginendが両方ともオプションの文字列を考えると、文字列全体と後方参照のみを一致させたいと思います。不明ですが、英数字です。文字通りです。どうすればこれを行うことができますか?beginendbeginBeginendend

問題がある場合は、Textpad マクロでこれを使用して、「beginend」を「begin」を含む別のものに置き換えます。

4

3 に答える 3

0

前向きな先読みを使用してみてください。これはゼロ幅のアサーションであるため、一致には含まれません。endまた、英数字の文字列内に部分文字列を含めることもできます

([a-z0-9]*)(?=end)

これが言っていることは次のとおりです。英数字の文字列は、直後に続く場合にのみ一致します。end

于 2012-12-04T10:29:28.177 に答える
0

「end」を含まない「英数字」文字の文字列を照合するには、次のように使用できます。

(?:(?!end)[A-Za-z\d])+

このような表現はあなたが求めることをするでしょう:

^((?:(?!end)[A-Za-z0-9])+)(?:end)?\z
于 2012-12-04T01:17:18.703 に答える
0

編集済み(ブロック引用の後に参照)

私はコメント権限を持っていないので、彼の解決策についてコメントすることはできませんが、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 のソリューションで行われた方法です)。しかし今、私は疑問に思っています...「終了」がオプションになる場合、および条件が許可されない場合、それを使用する意味は何ですか? ……考えすぎなのかもしれません。私はあなたの返事を待ちます。

于 2012-12-04T07:50:04.623 に答える