regex - 英数字 - 正規表現 記号以外




正規表現2つの文字列間のすべての文字を一致させる (7)

崇高なテキスト3倍

崇高な文章では、例えば、あなたのケースではあなたが保つことに興味がある2つの単語を書くだけです

"これは"と "文"

あなたは〜の間に*を書いています

すなわち、 This is .* sentence

これはあなたをうまくやってくれるでしょう

例: "This is just \ na simple sentence"です。

私は "This is"と "sentence"の間のすべての文字を一致させたい。 改行は無視する必要があります。 私は正しい構文を理解できません。


レイジー定量器が必要

受け入れられた答えの正規表現が私にとってはまったく正しいと思わないので、この質問を再現します。 どうして? なぜなら

(?<=This is)(.*)(?=sentence)

my first sentence. This is my secondマッチしmy first sentence. This is my second my first sentence. This is my second This is my first sentence. This is my second sentence. This is my first sentence. This is my second sentence.

デモを参照してください

2つのルックアバウトの間に遅延量子が必要です。 追加? 星を怠惰にする。

これはあなたが望むものと一致します:

(?<=This is).*?(?=sentence)

デモを参照してください 。 私はキャプチャグループを削除しましたが、これは必要ありませんでした。

改行を越えて一致するDOTALLモード

このデモでは、「ドットが改行モードに一致する」(別名)ドットオールが設定されていることに注意してください( さまざまな言語でDOTALLをオンにする方法を参照)。 多くの正規表現のフレーバでは、オンライン修飾子(?s)してそれを設定し、式を次のように変更できます。

(?s)(?<=This is).*?(?=sentence)

参照


あなたは単にこれを使うことができます: \This is .*? \sentence \This is .*? \sentence


ここで私はそれをやった方法です:
これは必要な特定の正規表現を見つけようとするよりも簡単でした。

int indexPictureData = result.IndexOf("-PictureData:");
int indexIdentity = result.IndexOf("-Identity:");
string returnValue = result.Remove(indexPictureData + 13);
returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); ` 

これを使用します: (?<=beginningstringname)(.*\n?)(?=endstringname)


例えば

(?<=This is)(.*)(?=sentence)

Regexr

私はlookbehind (?<=)と先読み(?=)使用して、 "This is"と "sentence"がマッチに含まれないようにしていますが、これはあなたのユースケースまでですThis is(.*)sentence

ここで重要なのは正規表現エンジンの "ドットオール"モードを有効にすることです. 改行にマッチしています。 しかし、これはあなたの正規表現エンジンに依存します。

次のことは、 .*または.*?を使用する場合です.* 。 最初のものは貪欲で、あなたの文字列の最後の "文"まで一致し、2番目の文字は怠惰であり、あなたの文字列の次の "文"まで一致します。

更新

Regexr

This is(?s)(.*)sentence

(?s)がドットモディファイアをオンにした場合、 改行文字にマッチする

アップデート2:

(?<=is \()(.*?)(?=\s*\))

あなたの例 "これは(単純な)文"と一致しています。 Regexrについてはこちら


誰かがJenkinsの文脈の中でこれの例を探している場合。 それはbuild.logを解析し、一致するものが見つかった場合はそれを使ってビルドに失敗します。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

node{    
    stage("parse"){
        def file = readFile 'build.log'

        def regex = ~"(?s)(firstStringToUse(.*)secondStringToUse)"
        Matcher match = regex.matcher(file)
        match.find() {
            capturedText = match.group(1)
            error(capturedText)
        }
    }
}




regex