/ / Regex: não corresponde se o padrão no final da string - c #, .net, regex

Regex: Não corresponde se o padrão no final da string - c #, .net, regex

Eu tenho o seguinte regex, em que desejo corresponder a qualquer ponto explícito seguido por um ou mais:

<b> <i> <u> </b> </i> </u>

Gostaria que este Regex NÃO correspondesse a esse padrão se ocorrer no final da string.

string = Regex.Replace(string, ".((<[/biu]+>)+)", ".$1||")

Ex:

This <b>should match.</b> allright.

This <i><b>shouldn"t match.</b></i>

Respostas:

13 para resposta № 1
".((<[/biu]+>)+)(?!$)"

Use a asserção lookahead negativa com o parâmetro $ símbolo para verificar o final da linha. (Lembrar, $ corresponde ao final da linha, então você deseja não corresponda a isso.)


5 para resposta № 2

Você poderia usar agrupamento atômico:

.(?>(?:</?[biu]>)+)(?!$)

3 para resposta № 3

Force que haja mais itens após o último elemento fechado, mas verifique se eles não são elementos.

".((<[/biu]+>)+)[^<>]+"