В чем разница между регулярными выражениями (? <= \ S) \ d (? = \ S) и (? - PullRequest
0 голосов
/ 20 декабря 2018

Почему выражение

(?<=\s)\d(?=\s)

не совпадает с выражением

(?<!\S)\d(?!\S)

?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018
 #Why is the expression
 (?<= \s )
 \d
 (?= \s )

 #not the same as the expression
 (?<! \S )
 \d
 (?! \S )

Когда вы используете отрицательное утверждение для отрицательного класса , оно также будет совпадать с
в позициях BOS и EOS, тогда как положительное утверждение не будет.

0 голосов
/ 20 декабря 2018

Одно из отличий состоит в том, что положительный взгляд назад и вперед требует, чтобы те символы, которые искали, существовали, а отрицательный взгляд - нет.Например,

1 2

будет иметь 2 совпадения по

(?<!\S)\d(?!\S)

, но не совпадет по

(?<=\s)\d(?=\s)

https://regex101.com/r/tjYc1o/1

(?=\s)требует, чтобы за цифрой следовал пробел, поэтому цифра не будет совпадать, если цифра находится в конце строки, но если вместо нее используется (?!\S), отрицательный прогноз будет pass ,потому что за цифрой в конце строки не следует непробельный символ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...