Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

URL_REGEX doesn't match URLs in markdown link syntax

Abierto Apto para principiantes
#55,849 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@LexioJ ya está trabajando en esto.

Desde el 18/10/2025.

  • #55850 de @LexioJ — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
62/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
php
Área
backend

Línea de trabajo

Comience con URL_REGEX_NO_MODIFIERS en lib/public/IURLGenerator.php y extractReferences() en lib/private/Collaboration/Reference/ReferenceManager.php. Compruebe los ejemplos de URL simples y de enlaces Markdown del issue, y después verifique que la extracción siga procesando las URL existentes y también devuelva las URL incluidas en la sintaxis de enlace Markdown; revise core/src/OCP/comments.js por la preocupación de sincronización mencionada.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

3. to review 33-feedback bug
Issue Description

Component: OCP\IURLGenerator::URL_REGEX / Reference extraction in ReferenceManager

Current Behavior:

The URL_REGEX pattern used by ReferenceManager::extractReferences() fails to match URLs when they're embedded in markdown link syntax:

// lib/public/IURLGenerator.php
public const URL_REGEX_NO_MODIFIERS = '(\s|\n|^)(https?:\/\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\/[-A-Z0-9+&@#%?=~_|\!:,.;()]*)*)(\s|\n|$)';

The regex requires whitespace/newline before the URL ((\s|\n|^)), which doesn't match markdown syntax where URLs are preceded by ](.

Test Case:

Plain URL (works):
"Check https://github.com/nextcloud/server/issues/55845 for details"
✅ Extracted: https://github.com/nextcloud/server/issues/55845

Markdown link (fails):
"Check [GH #55845](https://github.com/nextcloud/server/issues/55845) for details"
❌ Extracted: (nothing)

Root Cause:

In lib/private/Collaboration/Reference/ReferenceManager.php line 53:

public function extractReferences(string $text): array {
    preg_match_all(IURLGenerator::URL_REGEX, $text, $matches);
    // ...
}

The regex pattern doesn't account for markdown link syntax [label](url) where the URL is preceded by ]( instead of whitespace.

Impact:

Reference providers (GitHub, GitLab, Zammad, custom integrations) don't generate rich previews when users paste markdown-formatted links, forcing users to paste plain URLs which reduces text readability.

Affected Use Cases:

  • [GH #55845](https://github.com/nextcloud/server/issues/55845) - GitHub issues
  • [Ticket #12345](https://support.example.com/ticket/12345) - Support tickets
  • [PROJ-123](https://jira.example.com/browse/PROJ-123) - JIRA issues
  • Any markdown link in Text app, Talk, or Comments

Proposed Solution:

Update URL_REGEX_NO_MODIFIERS to also match URLs preceded by markdown syntax:

public const URL_REGEX_NO_MODIFIERS = '(\s|\n|^|\]\()(https?:\/\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\/[-A-Z0-9+&@#%?=~_|\!:,.;()]*)*)(\s|\n|$|\))';
//                      ^^^^ added markdown start      ^^^ added closing paren

Alternative Solution:

Strip markdown syntax before URL extraction:

public function extractReferences(string $text): array {
    // Strip markdown link syntax: [label](url) → url
    $text = preg_replace('/\[([^\]]+)\]\(([^)]+)\)/', ' $2 ', $text);
    preg_match_all(IURLGenerator::URL_REGEX, $text, $matches);
    // ...
}

Backward Compatibility:

  • Existing plain URL extraction continues to work
  • New: Markdown links also extracted
  • No breaking changes for reference providers

Related Code:

  • lib/public/IURLGenerator.php - URL_REGEX definition
  • lib/private/Collaboration/Reference/ReferenceManager.php - extractReferences()
  • Frontend: core/src/OCP/comments.js (mentioned in comments as needing sync)

Nextcloud Version:

  • Affects: All versions with Reference Provider system (NC 25+)
  • Tested on: Nextcloud 30

Workaround:

Users must paste plain URLs without markdown formatting to trigger rich previews.

Lenguaje dominante
PHP
Estrellas
37k
Forks
5.3k
Merge medio
1 d 23 h
PR fusionados (30 d)
680

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de nextcloud/server

Todos los issues de nextcloud/server

Issues similares

Más issues de PHP

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.