0

正規表現を使用して、ドキュメントのフォルダー内のテキストを検索および置換しようとしています。私の問題は、テキストが同じ行に 2 回表示されると、正規表現が最初の行の最初から 2 番目の行の終わりまで 2 つの式を一緒に実行することによって一致を「見つける」ことです。

正規表現での私の試みは次のとおりです。

\\x.*\\x\*

一致させようとしているテキストは、\x で始まり、\x* で終わります。

この最初の例には、1 つの一致が含まれています。

2Y Sara concibió \xa \xo 21.2: \xt Heb 11.11.\x* y le dio un hijo a Abrahán en su vejez, en el tiempo preciso que Dios le había anunciado.

この 2 番目の例には 2 つの一致が含まれていますが、これらは正規表現によって一緒に実行されます。

2Los creó hombre y mujer, \xa \xo 5.2: \xt Mt 19.4; Mc 10.6.\x* y los bendijo.\xb \xo 5.1-2: \xt Gn 1.27-28.\x* El día en que fueron creados les puso por nombre Adán.

このような欲求不満のために、私は正規表現に習熟したことはありません...常に素晴らしいアイデアのように聞こえます. でも勉強しようと思います!

4

1 に答える 1

2

アスタリスク.*も一致します。デフォルトでは、正規表現は貪欲です: できるだけ多くの文字に一致し、一致が成功するまで逆方向に進みます。

1 つのオプションは、の後.*に疑問符を付けて、 を作成すること.*?です。この構文は、一致が非貪欲であることを主張するため、可能な限り少ない文字に一致します。末尾のある構文は?、Perl、ECMA、Java、およびPOSIX/GNU 実装以外のほとんどの実装で互換性があります。つまり、このように:

\\x.*?\\x\*

別の方法として、正規表現では[^*]*. ただし、これにより、バックスラッシュが前に付いていないものであっても、文字列内のアスタリスクと一致することができなくなります。

(正誤表を指摘してくれた lxop に感謝します!)

于 2013-01-16T22:28:59.587 に答える