質問

lexは初めてで、正規表現に固有のすべての一致を取得したい

たとえば次のテキストの場合:

/* text text

text 
text

text */

text text
/* text text text text text text

text text */

/ *と* /の間の2つの一致を選択したい

しかし、lexは外部マッチ全体に一致し、2つを返しません! この式を使用します:

\/\*(.|\n)*\*\/

外部一致全体ではなく内部一致を選択するにはどうすればよいですか? ありがとう

役に立ちましたか?

解決

\/\*([^*]|\n|\*+[^*/])*\*+\/

何が起こっているのかというと、*は貪欲です-可能な限り長い文字列に一致します。上記の式は、文字/が後に続かない限り、正規表現を継続できるようにすることで、文字*を個別に扱います。これは、正規表現の内部単位を次のいずれかにすることで実現できます

  • *ではない文字
  • 改行
  • *の文字列の後に/ではない文字が続く

最後に、* sの後に/が続く文字列があります。 (注:以前のバージョンでは、このケースを正しく処理できませんでした。flexに*?演算子が必要でした。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top