En todos los casos enumerados a continuación, quiero hacer coincidir solo ___ (tres guiones bajos).
Para que quede claro, estoy tratando de hacer coincidir 3 guiones bajos no precedidos inmediatamente o no seguidos inmediatamente con un carácter de guión bajo y:
_ precede a ___ , coincide con los últimos 3 ( test3_ ___ )_ sigue a ___ , haga coincidir los primeros 3 ( ___ ____test5 ).Ver mi intento actual :
((?<=_)___|___(?=_)|___)Probado con:
test1___(test2 ___) test3____ ___ ___test4 + ____test5Todos los casos coinciden correctamente excepto "test3": coincide con los primeros 3 guiones bajos en lugar de los últimos 3.
Puedes usar
(?<!_)___(?=_*[^\s_])|(?<=[^\s_]_*)___(?!_)|(?<!_)___(?!_)Vea la demostración de expresiones regulares . Detalles :
(?<!_)___(?=_*[^\s_]) - una cadena ___ no precedida inmediatamente por un carácter _ y que va seguida inmediatamente por cero o más guiones bajos y luego cualquier carácter que no sea un espacio en blanco y _| - o(?<=[^\s_]_*)___(?!_) - una cadena ___ que no va seguida inmediatamente de otro carácter _ e inmediatamente precedida de cualquier carácter que no sea un espacio en blanco y _ y luego cero o más guiones bajos| - o(?<!_)___(?!_) - tres guiones bajos ni precedidos ni seguidos de otro _ char.