Регулярное выражение, которое фиксирует все между совпадениями, но ОТРИЦАЕТ совпадения

Пример строки:

[fun-stuff-thats-fun-goes-here] dumbstuffidontwantishere\

Мне нужна строка между скобками, но я хочу свести на нет скобки.

Regex, который я пробовал:

[^\[]*[\]]

Это производит:

fun-stuff-thats-fun-goes-here]

Именно то, что вы ожидаете. Но если я отрицаю последнее совпадение с помощью:

[^\[]*[^\]]

каким-то образом я все это улавливаю.

[fun-stuff-thats-fun-goes-here] dumbstuffidontwantishere\

я просто хочу, чтобы результат был:

fun-stuff-thats-fun-goes-here

Я попробовал все, что имело для меня смысл. Пожалуйста помоги.

Попробуйте: \[([^\]]*)\]. Это для Java (\\[([^\\]]*)\\])?

user24714692 21.06.2024 20:35

Попробуйте: (?<=\[)[^]]+(?=])

anubhava 21.06.2024 20:38

@user24714692 user24714692 - не сработало, фиксирует скобки. Я тестирую на regexr.com, но скрипт, который я пытаюсь использовать, - это powershell.

Justin Beagley 21.06.2024 20:43

@anubhava не сработало. Ничего не фиксирует

Justin Beagley 21.06.2024 20:44

@JustinBeagley, как насчет использования ^|(?<=\[)[^\]]*(?=\])? написано и протестировано только с показанными образцами.

RavinderSingh13 21.06.2024 20:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
57
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать:

$text = "[fun-stuff-thats-fun-goes-here] dumbstuffidontwantishere"
$pattern = "\[([^\]]*)\]"
if ($text -match $pattern) {
    $matches[1]
}

Принты

fun-stuff-thats-fun-goes-here


или вы можете использовать тот, что в комментарии:

  • Попробуйте: (?<=\[)[^]]+(?=]) – анубхава
$text = "[fun-stuff-thats-fun-goes-here] dumbstuffidontwantishere"
$pattern = "(?<=\[)[^]]*(?=])"
if ($text -match $pattern) {
    $matches[0]
}

Значит, будет две спички, и ты просто возьмешь вторую, да?

Justin Beagley 21.06.2024 20:49

@JustinBeagley Да, тот, что в группе.

user24714692 21.06.2024 20:50

@JustinBeagley Обновлено. Другой шаблон в комментарии к вопросу также работает.

user24714692 21.06.2024 20:53

Нашел ответ здесь - любые другие идеи были бы замечательными, но это сработало для меня.

Regex Сопоставить все символы между двумя строками

(?<=[)(.*)(?=])

Ответ принят как подходящий

Когда дело доходит до извлечения значений из строки посредством сопоставления регулярных выражений, кратким решением является использование оператора PowerShell -replace для сопоставления всей входной строки и замены ее интересующей подстрокой:

# -> 'fun-stuff-thats-fun-goes-here'
'[fun-stuff-thats-fun-goes-here] dumbstuff...' -replace '\[(.+?)\].*', '$1'
  • (...) создает группу захвата, на которую в выражении замены можно ссылаться как $1 (первая и единственная группа захвата).

  • .+? лениво (?) захватывает любую непустую серию (+) символов (.), следующих за [ и до следующего ], и .* сопоставляет все, что идет после, тем самым сопоставляя всю строку, так что фактически только то, что соответствует группе захвата, является вернулся.

Другие вопросы по теме