Извините, если я не должен публиковать что-то здесь, это не ответ, но мой пост слишком длинный для комментария.
Я хотел бы указать, что решение janosdivenyi добавление конечного []
в dt
не всегда дает ожидаемые результаты (даже при использовании data.table 1.9.6 или 1.10.4), как я делаю ниже.
Приведенные ниже примеры показывают, что если dt
- последняя строка в функции, которая получает желаемое поведение без присутствия конечного []
, но если dt
не находится в последней строке в функции, то для получения желаемое поведение.
В первом примере показано, что без конечного []
на dt
мы получаем ожидаемое поведение, когда dt
находится на последней строке функции
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
df <- 1
dt[, z := y - x]
}
myfunction(mydt) # Nothing printed as expected
mydt # Content printed as desired
## x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
Добавление конечного []
в dt
дает неожиданное поведение
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
df <- 1
dt[, z := y - x][]
}
myfunction(mydt) # Content printed unexpectedly
## x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
mydt # Content printed as desired
## x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
Перемещение df <- 1
после dt без конечного []
дает неожиданное поведение
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
dt[, z := y - x]
df <- 1
}
myfunction(mydt) # Nothing printed as expected
mydt # Nothing printed unexpectedly
Перемещение df <- 1
после dt с конечным []
дает ожидаемое поведение
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
dt[, z := y - x][]
df <- 1
}
myfunction(mydt) # Nothing printed as expected
mydt # Content printed as desired
## x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
Общей трюкой является использование техники захвата внутри неизведанного позитивного взгляда. Используйте это регулярное выражение с preg_match_all
:
(?=(1....1))
См. regex demo
Значения находятся в $matches[1]
:
$re = "/(?=(1....1))/";
$str = "001110000100001100001";
preg_match_all($re, $str, $matches);
print_r($matches[1]);
См. ссылку lookahead :
Lookaround фактически соответствует символам, но затем отбрасывает совпадение, возвращая только результат: совпадение или не совпадает. Вот почему их называют «утверждениями». Они не потребляют символы в строке, а только утверждают, возможно ли совпадение.
Если вы хотите сохранить совпадение регулярного выражения внутри lookahead, вам нужно поместить скобки для скобок вокруг регулярного выражения внутри lookahead, вот так:
blockquote>(?=(regex))
.