Существует ли не строгое тестирование и на сколько оно удобно если таковое имеется. Допустим у меня в файле есть строка которая может находится между двумя другими строками. Ну типа...Дед бабу бил билБил бил Баба сдохлаБил билБил билПриехали ментыСтрока баба сдохла должна быть между дед бабу бил и приехали менты. Где конкретно не важно. На сколько удобно такое тестирование делать?
Regexp:
/Дед бабу бил ((.|\n)*)Баба сдохла((.|\n)*)Приехали менты/gm
Протестировать можешь тут: https://regex101.com/
Регекспы я в курсе есть. Если оч много таких регекспов нужно есть чего нибудь?
- "Дед бабу бил бил"
- "Бил бил"
- "Баба сдохла"
- "Бил бил"
- "Бил бил"
- "Приехали менты"
$txt = "Дед бабу бил бил`nБил бил`nБаба сдохла`nБил бил`nОтдыхаем`nБил бил`nПриехали менты"
$beat = "Бил бил"
$kill = "Баба сдохла"
$tabl = $txt -split '\n'
for ($i = 0; $i -lt $tabl.Count; $i++) {
if ($Tabl[$i] -eq $beat) {
$beatIndex = $i
}}
for ($i = 0; $i -lt $tabl.Count; $i++) {
if ($Tabl[$i] -eq $kill) {
$killIndex = $i
}}
$i = 0
$tablN = New-Object System.Data.DataTable
$tablN.Columns.Add() | Out-Null
ForEach ($item in $tabl){
if ($i -ne $killIndex){
$tablN.Rows.Add($item) | Out-Null
}
if($i -eq $beatIndex){
$tablN.Rows.Add($tabl[$killIndex]) | Out-Null
}
$i++
}
И в строку если надо
$rowValues = $tabln.Rows | ForEach-Object {
$_.ItemArray | ForEach-Object {
if ($_ -is [System.ComponentModel.MarshalByValueComponent]) {
$_.ToString()
} else {
$_
}
}
}
$resultString = $rowValues -join "\n"
решение из головы
ищем подстроки все три
сравниваем чтобы индексы найденных шли по возрастанию
профит
А если баба сдохла но не сразу. Строка тест должна пройти