Чтобы убедиться, что одинарная кавычка, обратная галочка и двойная кавычка и одинаковый закрывающий символ, вы можете использовать группу захвата с обратной ссылкой к этой группе.
Чтобы та же группа в чередовании также соответствовала (
с закрывающим )
, вы можете использовать группу сброса ветви .
Соответствие Test
находится в группе 2
(?|(["'`])(Test)\1|\(((Test)\)))
Пояснение
(?|
Группа сброса ветви (["'`])
Захват в группе 1любой из перечисленных (Test)\1
Захват в группе 2 Соответствующий тест с последующей обратной ссылкой \1
на группу 1 |
Или \(((Test)\))
Соответствие (
, захват в группе 2, соответствующий Test
, за которым следует )
)
Закрыть группу сброса ветви
Regex demo | Php demo
Например:
$strings = [
"\"Test\"",
"'Test'",
"`Test`",
"(Test)",
"Test\"",
"'Test",
"Test`",
"(Test",
"\"Test'",
"'Test\"",
"`Test",
"Test)",
];
$pattern = '/(?|(["\'`])(Test)\1|\(((Test)\)))/';
foreach ($strings as $string){
$isMatch = preg_match($pattern, $string, $matches);
if ($isMatch) {
echo "Match $string ==> " . $matches[2] . PHP_EOL;
}
}
Результат
Match "Test" ==> Test
Match 'Test' ==> Test
Match `Test` ==> Test
Match (Test) ==> Test