У меня есть два регулярных выражения:
([^.]*string)
((?<![.]\.)string)
Оба работают. Но я не хочу искать строку, в которой есть точка.
1) .string
2) string
Для первого регулярного выражения оно соответствует остальной части строки, кроме точки.
Второй - полное совпадение
Regex соответствует обоим.
Я хочу регулярное выражение, которое получает только второе.
Это немного расплывчато, но, насколько я понимаю, почему бы не использовать \w, чтобы не совпадать с периодами. Например ^\w+
Вы делаете упор на запятая в своем вопросе, но используете период в своих регулярных выражениях.
^string$ тоже не работает
Вам нужно (?<!\.)string
Это работает, (?<!\.)строка
Также вы можете объяснить, почему это не сработало ((?<![.]\.)string)
Можете ли вы объяснить, что вы пытаетесь сделать.
((?<![.]\.)string) на самом деле очень близкое решение, оно «почти» правильное, но оно не работает, потому что соответствует string, которому не предшествуют точки два. [.]\. соответствует .. строке.





Если мы хотим передать все, кроме ., мы будем передавать новые строки с выражением, например:
([\s\S]*?)(\.?)
([\w\W]*?)(\.?)
([\d\D]*?)(\.?)
jex.im визуализирует регулярные выражения:
Если мы хотим найти экземпляры string без точки, такие как .string или .string. или .string", то мы можем просто перечислить их в выражение, похожее на:
([\s\S]*?)(\sstring|\x22string\x22|\x27string\x27)?
([\w\W]*?)(\sstring|\x22string\x22|\x27string\x27)?
([\d\D]*?)(\sstring|\x22string\x22|\x27string\x27)?
Извините за невежество, а в чем разница между ([\s\S]*?) и (.*?) ?
Попробуйте это регулярное выражение:
((?<!\.)string)
Он использует отрицательный взгляд назад.
Попробуйте это: ^string$