回答:
例えば
(?<=This is)(.*)(?=sentence)
「これは」と「文章」がマッチに含まれないように後読み(?<=)
と先読みを使用しました(?=)
が、これはユースケース次第であり、単純に書くこともできますThis is(.*)sentence
。
ここで重要なことは、正規表現エンジンの「ドットオール」モードをアクティブにして、.
が改行と一致するようにすることです。ただし、これを行う方法は、正規表現エンジンによって異なります。
次は、.*
またはを使用する場合です.*?
。最初のものは貪欲で、文字列の最後の「文」まで一致し、2番目のものは遅延して、文字列の次の「文」まで一致します。
更新
This is(?s)(.*)sentence
(?s)はdotall修飾子をオンにし、.
一致する改行文字を作成します。
アップデート2:
(?<=is \()(.*?)(?=\s*\))
あなたの例「これは(簡単な)文です」と一致しています。Regexrについてはこちらをご覧ください
This is(?s)(.*)sentence
いますか?
受け入れられた回答の正規表現が私にはまったく正しくないように見えるため、この質問を復活させます。どうして?なぜなら
(?<=This is)(.*)(?=sentence)
で一致my first sentence. This is my second
しますThis is my first sentence. This is my second sentence.
2つのルックアラウンドの間には、遅延量指定子が必要です。a ?
を追加すると、スターが遅延します。
これはあなたが望むものと一致します:
(?<=This is).*?(?=sentence)
デモを参照してください。不要になったキャプチャグループを削除しました。
改行間で一致するDOTALLモード
デモでは、「ドット一致改行モード」(別名)ドットオールが設定されていることに注意してください(さまざまな言語でDOTALLをオンにする方法を参照してください)。多くの正規表現フレーバーでは(?s)
、式を次のように変更して、オンライン修飾子で設定できます。
(?s)(?<=This is).*?(?=sentence)
参照
.*
とは.*?
また私の答え(「更新」前の段落)に説明されています。だから私は私の答えが間違っているとは思わない。
is incorrect
からdoesn't seem quite correct to me
... に和らげました。それがあなたをけいれんさせないことを願っています。おそらく、このような高トラフィックの回答の正規表現がどうあるべきかについての認識の違いだけです。
試してThis is[\s\S]*sentence
、JavaScriptで動作する
[\s\S]*?
(別名:貪欲でないワイルドカード)
この:
This is (.*?) sentence
JavaScriptで動作します。
誰かが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)
}
}
}
あなたはこれを単に使うことができます: \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); `
私はここでregexを検索して、この印刷構文を、Python3の古いスクリプトで、Python 2の印刷「文字列」間で変換しました。うまく機能します。それ以外の場合は、追加の変換に2to3.pyを使用します。これが他の人のための私の解決策です:
Regexr.comで試してください(何らかの理由でNP ++では機能しません)。
find: (?<=print)( ')(.*)(')
replace: ('$2')
変数の場合:
(?<=print)( )(.*)(\n)
('$2')\n
ラベルと変数の場合:
(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n
RegExは、Javaアプローチを使用して2つの文字列間のすべてを照合します。
List<String> results = new ArrayList<>(); //For storing results
String example = "Code will save the world";
RegEx (。?)*を使用するために、PatternオブジェクトとMatcherオブジェクトを使用してみましょう。
Pattern p = Pattern.compile("Code "(.*?)" world"); //java.util.regex.Pattern;
Matcher m = p.matcher(example); //java.util.regex.Matcher;
Matcherには複数の一致が含まれる可能性があるため、結果をループして保存する必要があります。
while(m.find()){ //Loop through all matches
results.add(m.group()); //Get value and store in collection.
}
この例には「will save the」という単語のみが含まれますが、より大きなテキストでは、より多くの一致が見つかる可能性があります。