Regex для согласующих отрезков длинной линии, которые НЕ содержат слово

Примечание

Вы можете улучшить конвейер (если вы кодируете на C, компилятор сделает это за вас) и использовать интервал задержки инструкции bne. Это улучшит ваш параллелизм на уровне команд .

Предполагая, что у вас есть что-то вроде процессора Mips с 1 слотом задержки и 5-ступенчатым конвейером (извлечение инструкций, декодирование, выполнение, память, обратная запись).

Этот конвейер вводит Read After Write Опасности, связанные с зависимостью от данных, больше всего были в $3 регистре.

Атака RaW приводит к остановке вашего трубопровода.

# Reverse the order of data in Reference and store it in $02
Loop:   and     $03, $01, $06       # mask out one piece ($03 = Reference & $06)
        addi    $04, $04, -1        # decrement Loop counter (RaW on $3)
        sllv    $03, $03, $05       # shift piece to new position ($03 <<= $05)
        sllv    $06, $06, $05       # shift mask for next piece
        or      $02, $02, $03       # put piece into $02 ($02 |= $03)
        and     $03, $01, $06       # mask out next piece (#03 = Reference & $06)
        srlv    $06, $06, $05       # shift mask back
        srlv    $03, $03, $05       # shift piece to new position ($03 >>= $05)
        addi    $05, $05, -4        # decrease shift amount by 4
        or      $02, $02, $03       # put new piece into $02 ($02 |= $03)
        bne     $04, [110], Loop      # keep looping while $04 != 0
        sll     $06, $06, 2         # shift mask for next loop

Если у вас суперскалярный процессор, решение нуждается в некоторых изменениях.

9
задан Community 23 May 2017 в 12:08
поделиться

4 ответа

Это выражение выполнит свою работу.

^(?:.(?<!Polarion))*$

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

    ^                  Anchor to start of string
    (?:                Non-capturing group
        .              Match any character
        (?<!Polarion)  Zero-width negative lookbehind assertion - text to the
                       left of the current position must not be "Polarion"
    )
    *                  Zero or more times
    $                  Anchor to end of string

Следующая версия будет выполнять утверждение только после «n» - может быть, это будет быстрее, а может быть, медленнее.

^(?:[^n]*|n(?<!Polarion))*$
19
ответ дан 4 December 2019 в 07:15
поделиться

Было бы проще, если бы вы заставили ваше регулярное выражение соответствовать тому, что вы ищете, а затем отмените результаты.

Большинство инструментов, использующих Regex, позволяют отменить результаты поиска, обычно вызывая опция 'v' для in V ert (сохраняя i для case- I nsensitive):

например

grep -v <search>
find /v <search>

и т. д.

9
ответ дан 4 December 2019 в 07:15
поделиться

Вот решение, использующее отрицательный просмотр вперед, который поддерживается более широко, чем просмотр назад:

^Message:(?!Polarion).*$

(Кроме того, поскольку мы знаем, где может появиться Полярион, нам не нужно делать ничего из бессмысленные причуды, предложенные Дэниелом.)


Объяснение приведенного выше выражения в форме комментария регулярного выражения:

(?x)       # Enable comments
^          # Start of string (start of line in multiline mode)
Message:   # Literal text
(?!        # Begin negative lookahead
Polarion   # Literal text
)          # End negative lookahead
.*         # Greedily match any number of any character
$          # End of string (end of line in multiline mode)
3
ответ дан 4 December 2019 в 07:15
поделиться

Я не смог найти никакой информации о том, какой движок регулярных выражений использует TortoiseSVN, но вы можете спросить в списке рассылки . Не все механизмы поддерживают расширенные функции, такие как отрицательный просмотр с нулевой шириной.

0
ответ дан 4 December 2019 в 07:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: