Regex Corresponde a todos os caracteres entre duas cordas

Exemplo: “Esta é apenas uma sentença simples”.

Eu quero combinar cada caractere entre “This is” e “sentence”. Quebras de linha devem ser ignoradas. Eu não consigo descobrir a syntax correta.

   

Por exemplo

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

Regexr

Eu usei lookbehind (?< =) E olhe para frente (?=) Para que "This is" e "sentence" não sejam incluídos na correspondência, mas isso depende do seu caso de uso, você também pode simplesmente escrever This is(.*)sentence .

O importante aqui é que você ative o modo "dotall" do seu motor regex, para que o . está combinando com a nova linha. Mas como você faz isso depende do seu mecanismo de regex.

A próxima coisa é se você usa .* Ou .*? . O primeiro deles é ganancioso e combinará até a última "sentença" em sua string, o segundo é preguiçoso e corresponderá até a próxima "sentença" em sua string.

Atualizar

Regexr

 This is(?s)(.*)sentence 

Onde o (? S) liga o modificador de ponto, fazendo o . combinando os caracteres da nova linha.

Atualização 2:

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

está combinando com o seu exemplo "Esta é uma frase simples". Veja aqui no Regexr

Quantificador Preguiçoso Necessário

Ressuscitando essa questão porque a regex na resposta aceita não parece muito correta para mim. Por quê? Porque

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

irá coincidir com a my first sentence. This is my second my first sentence. This is my second em This is my first sentence. This is my second sentence. This is my first sentence. This is my second sentence.

Veja demonstração .

Você precisa de um quantificador preguiçoso entre as duas expressões. Adicionando um ? torna a estrela preguiçosa.

Isso corresponde ao que você deseja:

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

Veja demonstração . Eu removi o grupo de captura, que não foi necessário.

Modo DOTALL para coincidir com as quebras de linha

Note que na demonstração o "ponto coincide com o modo quebra de linha" (aka) ponto-tudo é definido (veja como ativar o DOTALL em vários idiomas ). Em muitos sabores de regex, você pode configurá-lo com o modificador on-line (?s) , transformando a expressão em:

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

Referência

  • Os muitos graus de ganância Regex
  • Repetição com Star e Plus

Tente This is[\s\S]*sentence , funciona em javascript

Este:

 This is (.*?) sentence 

funciona em javascript.

use isso: (?< =beginningstringname)(.*\n?)(?=endstringname)

Você pode simplesmente usar isto: \This is .*? \sentence \This is .*? \sentence

No caso de alguém estar procurando por um exemplo disso dentro de um contexto de Jenkins. Ele analisa o build.log e, se encontrar uma correspondência, ele falhará na compilation com a correspondência.

 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) } } } 

Texto Sublime 3x

No texto sublime, você simplesmente escreve as duas palavras que você está interessado em manter, por exemplo, no seu caso, é

“Isto é” e “sentença”

e você escreve.

isto This is .* sentence

e isso deve fazer bem

Aqui está como eu fiz:
Isso foi mais fácil para mim do que tentar descobrir o regex específico necessário.

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

para uma pesquisa rápida no VIM, você poderia usar no prompt do Vim Control: / Isto é. * \ _. * sentença