Я новичок в regex
, я пытаюсь сопоставить некоторый узор, но он работает для меньшего шаблона len, но он застревает для большого шаблона (выглядит как проблема Catastrophic Backtracking).Regex для соответствия большому узору
Ниже моя строка,
world0 world1 world2 world3 world4 world5 world6 world7 world8 world9 world10
world11 world12 world13 world14 world15 world16 world17 world18 world19 world20
world21 world22 world23 world24 world25 world26 world27 world28 world29 world30
world31 world32 world33 world34 world35 world36 world37 world38 world39 world40
world41 world42 world43 world44 world45 world46 world47 world48 world49 world50
world51 world52 world53 world54 world55 world56 world57 world58 world59 world60
world61 world62 world63 world64 world65 world66 world67 world68
world69 world70 world71 world72 world73 world74 world75 world76 world77 world78
world79 world80 world81 world82 world83 world84 world85 world86 world87 world88
world89 world90 world91 world92 world93 world94 world95 world96 world97 world98
world99 world0 world1 world2 world3 world4 world5 world6 world7 world8 world9
world10 world11 world12 world13 world14 world15 world16 world17 world18 world19
world20 world21 world22 world23 world24 world25 world26 world27 world28 world29
world30 world31 world32 world33 world34 world35 world36 world37 world38 world39
world40 world41 world42 world43 world44 world45 world46 world47 world48 world49
world50 world51 world52 world53 world54 world55 world56 world57 world58 world59
world60 world61 world62 world63 world64 world65 world66 world67 world68 world69
world70 world71 world72 world73 world74 world75 world76 world77 world78 world79
world80 world81 world82 world83 world84 world85 world86 world87 world88 world89
world90 world91 world92 world93 world94 world95 world96 world97 world98
Теперь мой шаблон матча список строки позволяет сказать match_list, мой ожидаются выход, он должен соответствовать подстроке сверху, который имеет все строки, определенные в match_list строки
Small list = ["world0","world1", "world2"]
Я попытался следующий образец
(?=((\b(?:world0|world1|world2)\b[\w\s]*?){3}))
выше один отлично работает и соответствует выход правилен, который я ожидал,
[0-20] `world0 world1 world2`
[7-796] `world1 world2 world3 world4 world5 world6 world7 world8 world9 world10
world11 world12 world13 world14 world15 world16 world17 world18 world19 world20
world21 world22 world23 world24 world25 world26 world27 world28 world29 world30
world31 world32 world33 world34 world35 world36 world37 world38 world39 world40
world41 world42 world43 world44 world45 world46 world47 world48 world49 world50
world51 world52 world53 world54 world55 world56 world57 world58 world59 world60
world61 world62 world63 world64 world65 world66 world67 world68 world69 world70
world71 world72 world73 world74 world75 world76 world77 world78 world79 world80
world81 world82 world83 world84 world85 world86 world87 world88 world89
world90 world91 world92 world93 world94 world95 world96 world97 world98 world99 world0`
[14-803] `world2 world3 world4 world5 world6 world7 world8 world9 world10 world11
world12 world13 world14 world15 world16 world17 world18 world19 world20 world21
world22 world23 world24 world25 world26 world27 world28 world29 world30 world31
world32 world33 world34 world35 world36 world37 world38 world39 world40 world41
world42 world43 world44 world45 world46 world47 world48 world49 world50 world51
world52 world53 world54 world55 world56 world57 world58 world59 world60 world61
world62 world63 world64 world65 world66 world67 world68 world69 world70 world71
world72 world73 world74 world75 world76 world77 world78 world79 world80 world81
world82 world83 world84 world85 world86 world87 world88 world89 world90 world91
world92 world93 world94 world95 world96 world97 world98 world99 world0 world1`
[790-810] `world0 world1 world2`
Но для большого списка = [ 'world0', 'мира1', 'world2', 'world3', 'world4', 'world5', «world6 «world7», «world8», «world9», «world10», «world11», «world12», «world13», «world14», «world15», «world16», «world17», «world18», 'world19', 'world20', 'world21', 'world22', 'world23', 'world24', 'world25', 'world26', 'world27', 'world28', 'world29', 'world30', 'world31 «world32», «world33», «world34», «world35», «world36», «world37», «world38», «world39», «world40», «world41», «world42», «world43», 'world44', 'world45', 'world46', 'world47', 'world48', 'world49']
Пробовал следующий шаблон
(?=((\b(?:world0|world1|world2|world3|world4|world5|world6|world7|world8|world9|wor ld10|world11|world12|world13|world14|world15|world16|world17|world18|world19|world20|world21|world22|world23|world24|world25|world26|world27|world28|world29|world30|world31|world32|world33|world34|world35|world36|world37|world38|world39|world40|world40|world41|world42|world43|world44|world45|world46|world47|world48|world49|world50)\b[\w\s]*?){49}))
Это бросает мне катастрофическую ошибку обратного отслеживания. Не могли бы вы рассказать, что я делаю неправильно или что было бы лучшим способом сделать это?
Что вы пытаетесь найти здесь? ... все строки, начинающиеся с 'world' ??? –
У вас возникает проблема с [слишком длинным регулярным выражением] (https://regex101.com/r/bM9bR6/1), но, возможно, проблема с возвратом также может быть проблемой, потому что альтернативы имеют одинаковое начало. Если вы используете внешний список ключевых слов, вам необходимо обработать его, чтобы общие части использовались только один раз в шаблоне. –