diff --git a/src/lib/Repository/NameSchema/NameSchemaService.php b/src/lib/Repository/NameSchema/NameSchemaService.php index 2e02747ffe..591642135d 100644 --- a/src/lib/Repository/NameSchema/NameSchemaService.php +++ b/src/lib/Repository/NameSchema/NameSchemaService.php @@ -329,7 +329,7 @@ protected function tokenParts(string $token): array */ protected function filterNameSchema(string $nameSchema): array { - $retNamePattern = ''; + $retNamePattern = $nameSchema; $foundGroups = preg_match_all('/\((.+)\)/U', $nameSchema, $groupArray); $groupLookupTable = []; @@ -341,7 +341,7 @@ protected function filterNameSchema(string $nameSchema): array // Insert the group with its placeholder token /** @var string $retNamePattern */ - $retNamePattern = str_replace($group, $metaToken, $nameSchema); + $retNamePattern = str_replace($group, $metaToken, $retNamePattern); // Remove the pattern "(" ")" from the tokens $group = str_replace(['(', ')'], '', $group); diff --git a/src/lib/Repository/NameSchema/SchemaIdentifierExtractor.php b/src/lib/Repository/NameSchema/SchemaIdentifierExtractor.php index cb7d76c51f..d61478fada 100644 --- a/src/lib/Repository/NameSchema/SchemaIdentifierExtractor.php +++ b/src/lib/Repository/NameSchema/SchemaIdentifierExtractor.php @@ -27,7 +27,7 @@ final class SchemaIdentifierExtractor implements SchemaIdentifierExtractorInterf */ public function extract(string $schemaString): array { - $allTokens = '/<([^>-]+)>/'; + $allTokens = '/[<|\(]?([\w\d:_]+)[>\)]?/'; if (false === preg_match_all($allTokens, $schemaString, $matches)) { return []; @@ -46,7 +46,6 @@ public function extract(string $schemaString): array $strategy = 'field'; } - $token = preg_replace('/[()<>\[\]]/', '', $token); $strategyIdentifiers[$strategy][] = $token; } diff --git a/tests/lib/Repository/NameSchema/SchemaIdentifierExtractorTest.php b/tests/lib/Repository/NameSchema/SchemaIdentifierExtractorTest.php index e40378ba0e..a5bb17e369 100644 --- a/tests/lib/Repository/NameSchema/SchemaIdentifierExtractorTest.php +++ b/tests/lib/Repository/NameSchema/SchemaIdentifierExtractorTest.php @@ -85,6 +85,15 @@ public function getDataForTestExtract(): iterable 'custom' => ['bar'], ], ]; + + $schemaString = ' )>'; + yield $schemaString => [ + $schemaString, + [ + 'field' => ['description'], + 'attribute' => ['mouse_type', 'mouse_weight'], + ], + ]; } protected function setUp(): void @@ -99,6 +108,7 @@ protected function setUp(): void */ public function testExtract(string $schemaString, array $expectedStrategyIdentifierMap): void { - self::assertSame($expectedStrategyIdentifierMap, $this->extractor->extract($schemaString)); + $extracted = $this->extractor->extract($schemaString); + self::assertSame($expectedStrategyIdentifierMap, $extracted); } }