Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

266
Vistas
¿Por qué el patrón coincide con una palabra mientras que hay dos palabras idénticas?

Por favor, eche un vistazo a esto:

ingrese la descripción de la imagen aquí

como puede ver, solo hay una coincidencia en regex101 , pero el navegador coincide con dos palabras que son idénticas. Entonces, ¿por qué regex101 no puede coincidir con la segunda palabra? De todos modos, necesito hacer coincidir ambas palabras (o más si existe) .

Observó que no está relacionado con la bandera g . Porque lo he usado en el violín.

Aquí está el violín

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Tratar con un texto así es difícil para su uso posterior. Tienes que encontrar una representación diferente de cada letra para cambiar la palabra de búsqueda de مجلس a otra como احمدی نژاد según la solución de @Wiktor.

Es por eso que el proceso de normalización es útil:

La normalización es un proceso que implica transformar caracteres y secuencias de caracteres en una representación subyacente definida formalmente. Este proceso es más importante cuando se necesita comparar el texto para clasificarlo y buscarlo, pero también se usa cuando se almacena texto para garantizar que el texto se almacene en una representación coherente.

Necesitamos normalizar nuestra cadena de entrada en primer lugar usando Normalizer::normalize() y luego, sin ningún cambio en Regular Expression, podemos ejecutar con seguridad un preg_match_all sobre ella:

 <?php $text = <<< 'STR' یک نماینده مجلس عنوان کرد: ﺩﺭ ﺩﻭﺭﻩ ﺍﺣﻤﺪﯼﻧﮋﺍﺩ ﻣﺮﺩﻡ ﺩﺭ ﺭﻓﺎﻩ ﺑﻮﺩﻧﺪ !/دولت سابق تنها دولتی که پس از انقلاب به مردم خدمت کرد! ﻳﻚ ﻧﻤﺎﯾﻨﺪﻩ ﮔﺮﻭﻩ ﭘﺎﻳﺪﺍﺭی دﺭ ﻣﺠﻠﺲ ﺷﻮﺭﺍﯼ ﺍﺳﻼﻣﯽ ﺩﺭ ﭘﺎﺳﺦ ﺑﻪ ﺳﺆﺍﻟﯽ ﺩﺭ ﻣﻮﺭﺩ ﺑﺎﺯﮔﺸﺖ ﺍﺣﻤﺪﯼﻧﮋﺍﺩ ﺑﻪ ﻋﺮﺻﻪ ﺍﻧﺘﺨﺎﺑﺎﺕ ﺍﻇﻬﺎﺭ ﺩﺍﺷﺖ : ﻣﺎ ﺍﻣﯿﺪﻭﺍﺭﯾﻢ ﺍﯾﻦ ﺍﺗﻔﺎﻕ ﺑﯿﻔﺘﺪ ﻭ ﺍﺣﻤﺪﯼﻧﮋﺍﺩ ﺑﺮﺍﯼ ﺷﺮﮐﺖ ﺩﺭ ﺍﻧﺘﺨﺎﺑﺎﺕ ﺣﺎﺿﺮ ﺷﻮﺩ چرا که دولت وی تنها دولتی است که پس از انقلاب به مردم خدمت کرده است. STR; $normalizedText = normalizer_normalize( $text , Normalizer::NFKC ); preg_match_all('~مجلس~', $normalizedText, $matches); print_r($matches);

Salidas:

 Array ( [0] => Array ( [0] => مجلس [1] => مجلس ) )

Nota: necesita la extensión php_intl.dll para estar habilitada.

Demo en vivo

over 4 years ago · Santiago Trujillo Denunciar

0

Las palabras están escritas con caracteres diferentes que se ven iguales pero tienen diferentes códigos Unicode.

  • La primera palabra: \uFEE3\uFEA0\uFEE0\uFEB2
  • El que no coincide (con ... FORM en el nombre): \u0645\u062C\u0644\u0633

Aquí están los códigos:

 ‎FEE3 ARABIC LETTER MEEM INITIAL FORM ‎0645 ARABIC LETTER MEEM ‎FEA0 ARABIC LETTER JEEM MEDIAL FORM ‎062C ARABIC LETTER JEEM ‎FEE0 ARABIC LETTER LAM MEDIAL FORM ‎0644 ARABIC LETTER LAM ‎FEB2 ARABIC LETTER SEEN FINAL FORM ‎0633 ARABIC LETTER SEEN

No puede hacer coincidir ambos con una representación literal de cualquiera de las palabras, debe usar una alternancia con las dos/todas las variantes, o usar clases de caracteres para esos caracteres:

 [\x{FEE3}\x{0645}][\x{FEA0}\x{062C}][\x{FEE0}\x{0644}][\x{FEB2}\x{0633}]

Vea la demostración de expresiones regulares .

Una demostración de PHP :

 $re = '/[\x{FEE3}\x{0645}][\x{FEA0}\x{062C}][\x{FEE0}\x{0644}][\x{FEB2}\x{0633}]/u'; $str = 'یک نماینده مجلس عنوان کرد: ﺩﺭ ﺩﻭﺭﻩ ﺍﺣﻤﺪﯼﻧﮋﺍﺩ ﻣﺮﺩﻡ ﺩﺭ ﺭﻓﺎﻩ ﺑﻮﺩﻧﺪ !/دولت سابق تنها دولتی که پس از انقلاب به مردم خدمت کرد! ﻳﻚ ﻧﻤﺎﯾﻨﺪﻩ ﮔﺮﻭﻩ ﭘﺎﻳﺪﺍﺭی دﺭ ﻣﺠﻠﺲ ﺷﻮﺭﺍﯼ ﺍﺳﻼﻣﯽ ﺩﺭ ﭘﺎﺳﺦ ﺑﻪ ﺳﺆﺍﻟﯽ ﺩﺭ ﻣﻮﺭﺩ ﺑﺎﺯﮔﺸﺖ ﺍﺣﻤﺪﯼﻧﮋﺍﺩ ﺑﻪ ﻋﺮﺻﻪ ﺍﻧﺘﺨﺎﺑﺎﺕ ﺍﻇﻬﺎﺭ ﺩﺍﺷﺖ : ﻣﺎ ﺍﻣﯿﺪﻭﺍﺭﯾﻢ ﺍﯾﻦ ﺍﺗﻔﺎﻕ ﺑﯿﻔﺘﺪ ﻭ ﺍﺣﻤﺪﯼﻧﮋﺍﺩ ﺑﺮﺍﯼ ﺷﺮﮐﺖ ﺩﺭ ﺍﻧﺘﺨﺎﺑﺎﺕ ﺣﺎﺿﺮ ﺷﻮﺩ چرا که دولت وی تنها دولتی است که پس از انقلاب به مردم خدمت کرده است.'; preg_match_all($re, $str, $matches); print_r($matches[0]);

Producción:

 Array ( [0] => مجلس [1] => ﻣﺠﻠﺲ )
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda