Апостроф в начале / конце строки поиска, не рассматривается RegEx как часть слова

Sub assign_values()

    Const BLOCK_SZ As Long = 50
    Dim rng, c, tot

    Set rng = Range("O2").Resize(BLOCK_SZ, 1) '<< first block of 50 rows

    'keep going while there's content in Col K (you may need to adjust
    '  where you check for content)
    Do While Application.CountA(rng.Offset(0, -4)) > 0

        For Each c In rng.Cells
            c.Value = IIf(c.Offset(0, -4).Value > 0, 1, 0) 'based on ColK
        Next c

        tot = Application.Sum(rng) '<< only need this once, then keep count
        For Each c In rng.Cells
            If tot < 64 Then
                c.Value = c.Value + 1
                tot = tot + 1
            Else
                Exit For
            End If
        Next c

        Set rng = rng.Offset(BLOCK_SZ, 0) '<< next block of cells
    Loop

End Sub
2
задан akerbeltz 19 January 2019 в 00:12
поделиться

1 ответ

Я думаю, что вы должны предоставить свое собственное определение того, что является символом слова, вместо того, чтобы полагаться на границы слов по умолчанию ICE ([[:<:]], [[:>:]]). Из документации mysql 5.6 :

Слово - это последовательность символов слова, которой не предшествуют или не следуют символы слова. Символ слова - это буквенно-цифровой символ в классе alnum или знак подчеркивания (_).

Это будет означать: '^|[^[:alnum:]_]'

^             -- the beginning of the string
|             -- OR
[^            -- any character OTHER than
    [:alnum:]     -- an alphanumeric character
    _             -- an underscore
]

И конец строки ICE будет: '[^[:alnum:]_]|, где $ представляет конец строки.

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

  • начало: '^|[^[:alnum:]_'']'
  • конец: '[^[:alnum:]_'']|
  • [1147 ]

    Вот ваше регулярное выражение:

    SELECT (val REGEXP CONCAT('(^|[^[:alnum:]_''])', 'cat''s', '([^[:alnum:]_'']|$)'));
    

    См. Демонстрацию по dbfiddle

    Схема (MySQL v5.6) [1133 ]


    Запрос № 1

    Select ('cat''s'
        REGEXP CONCAT('(^|[^[:alnum:]_''])', 'cat''s', '([^[:alnum:]_'']|$)')) res;
    
    | res |
    | --- |
    | 1   |
    
    <час>

    Запрос № 2

    Select ('''cat''s' 
        REGEXP CONCAT('(^|[^[:alnum:]_''])', '''cat''s', '([^[:alnum:]_'']|$)' )) res;
    
    | res |
    | --- |
    | 1   |
    
    < hr>

    Запрос № 3

    Select ('_cat''s'
        REGEXP CONCAT('(^|[^[:alnum:]_''])', '_cat''s' , '([^[:alnum:]_'']|$)' )) res;
    
    | res |
    | --- |
    | 1   |
    
    <час>

    Запрос № 4

    Select ('-cat''s'  
        REGEXP CONCAT('(^|[^[:alnum:]_''])', '-cat''s' , '([^[:alnum:]_'']|$)' )) res;
    
    | res |
    | --- |
    | 1   |
    
    <час>

    Запрос № 5

    Select (' cat''s' 
        REGEXP CONCAT('(^|[^[:alnum:]_''])', ' cat''s' , '([^[:alnum:]_'']|$)' )) res;
    
    | res |
    | --- |
    | 1   |
    
    <час>

    Запрос № 6

    Select ('cat'''
        REGEXP CONCAT('(^|[^[:alnum:]_''])', 'cat''' , '([^[:alnum:]_'']|$)' )) res;
    
    | res |
    | --- |
    | 1   |
    
    <час>
    [1147 ]

    Вот ваше регулярное выражение:

    [111]

    См. Демонстрацию по dbfiddle

    Схема (MySQL v5.6) [1133 ]


    Запрос № 1

    [112] [113] <час>

    Запрос № 2

    [114] [115] < hr>

    Запрос № 3

    [116] [117] <час>

    Запрос № 4

    [118] [119] <час>

    Запрос № 5

    [1110] [1111] <час>

    Запрос № 6

    [1112] [1113] <час>
    , где $ представляет конец строки.

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

    • начало: '^|[^[:alnum:]_'']'
    • конец: '[^[:alnum:]_'']|
    • [1147 ]

      Вот ваше регулярное выражение:

      [111]

      См. Демонстрацию по dbfiddle

      Схема (MySQL v5.6) [1133 ]


      Запрос № 1

      [112] [113] <час>

      Запрос № 2

      [114] [115] < hr>

      Запрос № 3

      [116] [117] <час>

      Запрос № 4

      [118] [119] <час>

      Запрос № 5

      [1110] [1111] <час>

      Запрос № 6

      [1112] [1113] <час>
      [1147 ]

      Вот ваше регулярное выражение:

      [111]

      См. Демонстрацию по dbfiddle

      Схема (MySQL v5.6) [1133 ]


      Запрос № 1

      [112] [113] <час>

      Запрос № 2

      [114] [115] < hr>

      Запрос № 3

      [116] [117] <час>

      Запрос № 4

      [118] [119] <час>

      Запрос № 5

      [1110] [1111] <час>

      Запрос № 6

      [1112] [1113] <час>
0
ответ дан GMB 19 January 2019 в 00:12
поделиться
Другие вопросы по тегам:

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