я в основном видел $1
, используемые в разделе замены. Но в выражении это не сработает, вы должны использовать \1
, поэтому ваше выражение будет выглядеть так: "(.*?)\(.*?\)$1"
.
Давайте немного поправим. Мы могли бы явно сопоставить отрицательный класс символов: \([^)]+\)
. [^)]+
означает совпадение всего, кроме закрывающей скобки, один или несколько раз. Таким образом, мы также устранили пустые скобки.
Теперь давайте применим то, что мы только что узнали, и сделать выражение также принимает одиночные кавычки: ("|')(.*?)\([^)]+\)\2\1
("|') # match either a single or double quote and put it in group 1
(.*?) # match anything ungreedy zero or more times until ... and put it in group 2
\( # match opening parenthesis (
[^)]+ # match anything except closing parenthesis) one or more times
\) # match closing parenthesis
\2 # match what was matched in group 2
\1 # match what was matched in group 1
Для дальнейшего использования, мы могли бы также использовать именованные группы. Вы можете объявить именованную группу в .NET со следующим синтаксисом (?<namedgroup>.*?)
. Затем вы можете использовать обратную ссылку, как показано ниже: \k<namedgroup>
. Запомните этот синтаксис для .NET только. PCRE имеет другой синтаксис.
Принимая наше выражение выше в качестве примера может привести к следующей схеме:
(?<quotes>"|')(?<str>.*?)\([^)]+\)\k<str>\k<quotes>
Online .NET regex demo For further reading >>>
Попробуйте использовать '\ 1' вместо' $ 1'. [demo] (http://regex101.com/r/rE1qQ4) – HamZa
'$ 1' для замены строки. –