Выделяет специальный символ в R regex?

Несмотря на чтение страницы справки R regex

Наконец, чтобы включить литерал -, поместите его первым или последним (или, для perl = Только ИСТИНА, перед ним обратная косая черта).

Я не понимаю разницы между

grepl(pattern=paste("^thing1\\-",sep=""),x="thing1-thing2")

и

grepl(pattern=paste("^thing1-",sep=""),x="thing1-thing2")

Оба возвращают TRUE. Должен ли я убежать или нет? Какова наилучшая практика?

Ответ 1

Дефис в основном является нормальным символом в регулярных выражениях.

Вам не нужно скрывать дефис вне класса персонажа; он не имеет особого значения.

В классе символов [ ] вы можете поместить дефис в качестве символа первый или последний в диапазоне. Если вы поместите дефис где-нибудь еще, вам нужно его избежать, чтобы добавить его в свой класс.

Примеры:

grepl('^thing1-', x='thing1-thing2')
[1] TRUE
grepl('[-a-z]+', 'foo-bar')
[1] TRUE
grepl('[a-z-]+', 'foo-bar')
[1] TRUE
grepl('[a-z\\-\\d]+', 'foo-bar')
[1] TRUE

Примечание.. Более типично найти дефис, помещенный первым или последним в класс символов.

Ответ 2

Чтобы узнать, что означает - иметь особый смысл внутри класса символов (и как его поместить последним, дает ему его буквальное значение), попробуйте следующее:

grepl("[w-y]", "x")
# [1] TRUE
grepl("[w-y]", "-")
# [1] FALSE
grepl("[wy-]", "-")
# [1] TRUE
grepl("[wy-]", "x")
# [1] FALSE

Ответ 3

Они оба соответствуют одному и тому же тексту в этих экземплярах. То есть:.

x <- "thing1-thing2"
regmatches(x,regexpr("^thing1\\-",x))
#[1] "thing1-"
regmatches(x,regexpr("^thing1-",x))
#[1] "thing1-"

Использование - является специальным символом в определенных ситуациях, хотя для указания диапазонов значений, таких как символы между a и z, если указано внутри [], например:

regmatches(x,regexpr("[a-z]+",x))
#[1] "thing"