Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

264
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!