This is not so much a question as it is an observation of what happens when you try parsing with regexes. I continued flogging the dead horse I started on last week until there was frankly nothing but a bloody mess with flecks of horse meat and hair here and there. I wanted to see the wreck I had been warned about, but could not find any actual detailed expressions of the matter, so I wanted to see how deep into the abyss I could go and still come back unharmed. I don’t think I succeeded. I will probably never be the same after this.

I originally had five simple matching expressions for e. Four were recursive:

1. e =~ u 2. e =~ uae 3. e =~ edefe 4. e =~ ebe 5. e =~ ec

So I can write

e =~ u|uae|edefe|ebe|ec

This is recursive, so I use 1 and plug it into e in expressions 2-4 above to get

11 u 12 uau 13 udufu 14 ubu 15 uc

These 11 – 15 can then be substituted into 1 – 5 above to get

111 u 112 uau 113 udufu 114 ubu 115 uc 121 u 122 uauau 123 uauduaufuau 124 uaubuau 125 uauc 131 u 132 uaudufu 133 udufududufufudufu 134 udufubudufu 135 udufuc 141 u 142 uaubu 143 ubudubufubu 144 ubububu 145 ubuc 151 u 152 uauc 153 ucducfuc 154 ucbuc 155 ucc

These 111 – 155 can then be substituted into 1 – 5 above to get

1111 u 1112 uau 1113 udufu 1114 ubu 1115 uc 1121 u 1122 uauau 1123 uauduaufuau 1124 uaubuau 1125 uauc 1131 u 1132 uaudufu 1133 udufududufufudufu 1134 udufubudufu 1135 udufuc 1141 u 1142 uaubu 1143 ubudubufubu 1144 ubububu 1145 ubuc 1151 u 1152 uauc 1153 ucducfuc 1154 ucbuc 1155 ucc 1211 u 1212 uau 1213 udufu 1214 ubu 1215 uc 1221 u 1222 uauauau 1223 uauauduauaufuauau 1224 uauaubuauau 1225 uauauc 1231 u 1232 uauauduaufuau 1233 uauduaufuauduauduaufuaufuauduaufuau 1234 uauduaufuaubuauduaufuau 1235 uauduaufuauc 1241 u 1242 uauaubuau 1243 uaubuauduaubuaufuaubuau 1244 uaubuaubuaubuau 1245 uaubuauc 1251 u 1252 uauauc 1253 uaucduaucfuauc 1254 uaucbuauc 1255 uaucc 1311 u 1312 uau 1313 udufu 1314 ubu 1315 uc 1321 u 1322 uauaudufu 1323 uaudufuduaudufufuaudufu 1324 uaudufubuaudufu 1325 uaudufuc 1331 u 1332 uaudufududufufudufu 1333 udufududufufudufududufududufufudufufudufududufufudufu 1334 udufududufufudufubudufududufufudufu 1335 udufududufufudufuc 1341 u 1342 uaudufubudufu 1343 udufubudufududufubudufufudufubudufu 1344 udufubudufubudufubudufu 1345 udufubudufuc 1351 u 1352 uaudufuc 1353 udufucdudufucfudufuc 1354 udufucbudufuc 1355 udufucc 1411 u 1412 uau 1413 udufu 1414 ubu 1415 uc 1421 u 1422 uauaubu 1423 uaubuduaubufuaubu 1424 uaububuaubu 1425 uaubuc 1431 u 1432 uaubudubufubu 1433 ubudubufubudubudubufubufubudubufubu 1434 ubudubufubububudubufubu 1435 ubudubufubuc 1441 u 1442 uaubububu 1443 ubububudubububufubububu 1444 ubububububububu 1445 ubububuc 1451 u 1452 uaubuc 1453 ubucdubucfubuc 1454 ubucbubuc 1455 ubucc 1511 u 1512 uau 1513 udufu 1514 ubu 1515 uc 1521 u 1522 uauauc 1523 uaucduaucfuauc 1524 uaucbuauc 1525 uaucc 1531 u 1532 uaucducfuc 1533 ucducfucducducfucfucducfuc 1534 ucducfucbucducfuc 1535 ucducfucc 1541 u 1542 uaucbuc 1543 ucbucducbucfucbuc 1544 ucbucbucbuc 1545 ucbucc 1551 u 1552 uaucc 1553 uccduccfucc 1554 uccbucc 1555 uccc

These 1111 – 1555 can then be substituted into 1 – 5 above to get

11111 u 11112 uau 11113 udufu 11114 ubu 11115 uc 11121 u 11122 uauau 11123 uauduaufuau 11124 uaubuau 11125 uauc 11131 u 11132 uaudufu 11133 udufududufufudufu 11134 udufubudufu 11135 udufuc 11141 u 11142 uaubu 11143 ubudubufubu 11144 ubububu 11145 ubuc 11151 u 11152 uauc 11153 ucducfuc 11154 ucbuc 11155 ucc 11211 u 11212 uau 11213 udufu 11214 ubu 11215 uc 11221 u 11222 uauauau 11223 uauauduauaufuauau 11224 uauaubuauau 11225 uauauc 11231 u 11232 uauauduaufuau 11233 uauduaufuauduauduaufuaufuauduaufuau 11234 uauduaufuaubuauduaufuau 11235 uauduaufuauc 11241 u 11242 uauaubuau 11243 uaubuauduaubuaufuaubuau 11244 uaubuaubuaubuau 11245 uaubuauc 11251 u 11252 uauauc 11253 uaucduaucfuauc 11254 uaucbuauc 11255 uaucc 11311 u 11312 uau 11313 udufu 11314 ubu 11315 uc 11321 u 11322 uauaudufu 11323 uaudufuduaudufufuaudufu 11324 uaudufubuaudufu 11325 uaudufuc 11331 u 11332 uaudufududufufudufu 11333 udufududufufudufududufududufufudufufudufududufufudufu 11334 udufududufufudufubudufududufufudufu 11335 udufududufufudufuc 11341 u 11342 uaudufubudufu 11343 udufubudufududufubudufufudufubudufu 11344 udufubudufubudufubudufu 11345 udufubudufuc 11351 u 11352 uaudufuc 11353 udufucdudufucfudufuc 11354 udufucbudufuc 11355 udufucc 11411 u 11412 uau 11413 udufu 11414 ubu 11415 uc 11421 u 11422 uauaubu 11423 uaubuduaubufuaubu 11424 uaububuaubu 11425 uaubuc 11431 u 11432 uaubudubufubu 11433 ubudubufubudubudubufubufubudubufubu 11434 ubudubufubububudubufubu 11435 ubudubufubuc 11441 u 11442 uaubububu 11443 ubububudubububufubububu 11444 ubububububububu 11445 ubububuc 11451 u 11452 uaubuc 11453 ubucdubucfubuc 11454 ubucbubuc 11455 ubucc 11511 u 11512 uau 11513 udufu 11514 ubu 11515 uc 11521 u 11522 uauauc 11523 uaucduaucfuauc 11524 uaucbuauc 11525 uaucc 11531 u 11532 uaucducfuc 11533 ucducfucducducfucfucducfuc 11534 ucducfucbucducfuc 11535 ucducfucc 11541 u 11542 uaucbuc 11543 ucbucducbucfucbuc 11544 ucbucbucbuc 11545 ucbucc 11551 u 11552 uaucc 11553 uccduccfucc 11554 uccbucc 11555 uccc 12111 u 12112 uau 12113 udufu 12114 ubu 12115 uc 12121 u 12122 uauau 12123 uauduaufuau 12124 uaubuau 12125 uauc 12131 u 12132 uaudufu 12133 udufududufufudufu 12134 udufubudufu 12135 udufuc 12141 u 12142 uaubu 12143 ubudubufubu 12144 ubububu 12145 ubuc 12151 u 12152 uauc 12153 ucducfuc 12154 ucbuc 12155 ucc 12211 u 12212 uau 12213 udufu 12214 ubu 12215 uc 12221 u 12222 uauauauau 12223 uauauauduauauaufuauauau 12224 uauauaubuauauau 12225 uauauauc 12231 u 12232 uauauauduauaufuauau 12233 uauauduauaufuauauduauauduauaufuauaufuauauduauaufuauau 12234 uauauduauaufuauaubuauauduauaufuauau 12235 uauauduauaufuauauc 12241 u 12242 uauauaubuauau 12243 uauaubuauauduauaubuauaufuauaubuauau 12244 uauaubuauaubuauaubuauau 12245 uauaubuauauc 12251 u 12252 uauauauc 12253 uauaucduauaucfuauauc 12254 uauaucbuauauc 12255 uauaucc 12311 u 12312 uau 12313 udufu 12314 ubu 12315 uc 12321 u 12322 uauauauduaufuau 12323 uauauduaufuauduauauduaufuaufuauauduaufuau 12324 uauauduaufuaubuauauduaufuau 12325 uauauduaufuauc 12331 u 12332 uauauduaufuauduauduaufuaufuauduaufuau 12333 uauduaufuauduauduaufuaufuauduaufuauduauduaufuauduauduaufuaufu +auduaufuaufuauduaufuauduauduaufuaufuauduaufuau 12334 uauduaufuauduauduaufuaufuauduaufuaubuauduaufuauduauduaufuaufu +auduaufuau 12335 uauduaufuauduauduaufuaufuauduaufuauc 12341 u 12342 uauauduaufuaubuauduaufuau 12343 uauduaufuaubuauduaufuauduauduaufuaubuauduaufuaufuauduaufuaubu +auduaufuau 12344 uauduaufuaubuauduaufuaubuauduaufuaubuauduaufuau 12345 uauduaufuaubuauduaufuauc 12351 u 12352 uauauduaufuauc 12353 uauduaufuaucduauduaufuaucfuauduaufuauc 12354 uauduaufuaucbuauduaufuauc 12355 uauduaufuaucc 12411 u 12412 uau 12413 udufu 12414 ubu 12415 uc 12421 u 12422 uauauaubuau 12423 uauaubuauduauaubuaufuauaubuau 12424 uauaubuaubuauaubuau 12425 uauaubuauc 12431 u 12432 uauaubuauduaubuaufuaubuau 12433 uaubuauduaubuaufuaubuauduaubuauduaubuaufuaubuaufuaubuauduaubu +aufuaubuau 12434 uaubuauduaubuaufuaubuaubuaubuauduaubuaufuaubuau 12435 uaubuauduaubuaufuaubuauc 12441 u 12442 uauaubuaubuaubuau 12443 uaubuaubuaubuauduaubuaubuaubuaufuaubuaubuaubuau 12444 uaubuaubuaubuaubuaubuaubuaubuau 12445 uaubuaubuaubuauc 12451 u 12452 uauaubuauc 12453 uaubuaucduaubuaucfuaubuauc 12454 uaubuaucbuaubuauc 12455 uaubuaucc 12511 u 12512 uau 12513 udufu 12514 ubu 12515 uc 12521 u 12522 uauauauc 12523 uauaucduauaucfuauauc 12524 uauaucbuauauc 12525 uauaucc 12531 u 12532 uauaucduaucfuauc 12533 uaucduaucfuaucduaucduaucfuaucfuaucduaucfuauc 12534 uaucduaucfuaucbuaucduaucfuauc 12535 uaucduaucfuaucc 12541 u 12542 uauaucbuauc 12543 uaucbuaucduaucbuaucfuaucbuauc 12544 uaucbuaucbuaucbuauc 12545 uaucbuaucc 12551 u 12552 uauaucc 12553 uauccduauccfuaucc 12554 uauccbuaucc 12555 uauccc 13111 u 13112 uau 13113 udufu 13114 ubu 13115 uc 13121 u 13122 uauau 13123 uauduaufuau 13124 uaubuau 13125 uauc 13131 u 13132 uaudufu 13133 udufududufufudufu 13134 udufubudufu 13135 udufuc 13141 u 13142 uaubu 13143 ubudubufubu 13144 ubububu 13145 ubuc 13151 u 13152 uauc 13153 ucducfuc 13154 ucbuc 13155 ucc 13211 u 13212 uau 13213 udufu 13214 ubu 13215 uc 13221 u 13222 uauauaudufu 13223 uauaudufuduauaudufufuauaudufu 13224 uauaudufubuauaudufu 13225 uauaudufuc 13231 u 13232 uauaudufuduaudufufuaudufu 13233 uaudufuduaudufufuaudufuduaudufuduaudufufuaudufufuaudufuduaudu +fufuaudufu 13234 uaudufuduaudufufuaudufubuaudufuduaudufufuaudufu 13235 uaudufuduaudufufuaudufuc 13241 u 13242 uauaudufubuaudufu 13243 uaudufubuaudufuduaudufubuaudufufuaudufubuaudufu 13244 uaudufubuaudufubuaudufubuaudufu 13245 uaudufubuaudufuc 13251 u 13252 uauaudufuc 13253 uaudufucduaudufucfuaudufuc 13254 uaudufucbuaudufuc 13255 uaudufucc 13311 u 13312 uau 13313 udufu 13314 ubu 13315 uc 13321 u 13322 uauaudufududufufudufu 13323 uaudufududufufudufuduaudufududufufudufufuaudufududufufudufu 13324 uaudufududufufudufubuaudufududufufudufu 13325 uaudufududufufudufuc 13331 u 13332 uaudufududufufudufududufududufufudufufudufududufufudufu 13333 udufududufufudufududufududufufudufufudufududufufudufududufudu +dufufudufududufududufufudufufudufududufufudufufudufududufufudufududuf +ududufufudufufudufududufufudufu 13334 udufududufufudufududufududufufudufufudufududufufudufubudufudu +dufufudufududufududufufudufufudufududufufudufu 13335 udufududufufudufududufududufufudufufudufududufufudufuc 13341 u 13342 uaudufududufufudufubudufududufufudufu 13343 udufududufufudufubudufududufufudufududufududufufudufubudufudu +dufufudufufudufududufufudufubudufududufufudufu 13344 udufududufufudufubudufududufufudufubudufududufufudufubudufudu +dufufudufu 13345 udufududufufudufubudufududufufudufuc 13351 u 13352 uaudufududufufudufuc 13353 udufududufufudufucdudufududufufudufucfudufududufufudufuc 13354 udufududufufudufucbudufududufufudufuc 13355 udufududufufudufucc 13411 u 13412 uau 13413 udufu 13414 ubu 13415 uc 13421 u 13422 uauaudufubudufu 13423 uaudufubudufuduaudufubudufufuaudufubudufu 13424 uaudufubudufubuaudufubudufu 13425 uaudufubudufuc 13431 u 13432 uaudufubudufududufubudufufudufubudufu 13433 udufubudufududufubudufufudufubudufududufubudufududufubudufufu +dufubudufufudufubudufududufubudufufudufubudufu 13434 udufubudufududufubudufufudufubudufubudufubudufududufubudufufu +dufubudufu 13435 udufubudufududufubudufufudufubudufuc 13441 u 13442 uaudufubudufubudufubudufu 13443 udufubudufubudufubudufududufubudufubudufubudufufudufubudufubu +dufubudufu 13444 udufubudufubudufubudufubudufubudufubudufubudufu 13445 udufubudufubudufubudufuc 13451 u 13452 uaudufubudufuc 13453 udufubudufucdudufubudufucfudufubudufuc 13454 udufubudufucbudufubudufuc 13455 udufubudufucc 13511 u 13512 uau 13513 udufu 13514 ubu 13515 uc 13521 u 13522 uauaudufuc 13523 uaudufucduaudufucfuaudufuc 13524 uaudufucbuaudufuc 13525 uaudufucc 13531 u 13532 uaudufucdudufucfudufuc 13533 udufucdudufucfudufucdudufucdudufucfudufucfudufucdudufucfudufu +c 13534 udufucdudufucfudufucbudufucdudufucfudufuc 13535 udufucdudufucfudufucc 13541 u 13542 uaudufucbudufuc 13543 udufucbudufucdudufucbudufucfudufucbudufuc 13544 udufucbudufucbudufucbudufuc 13545 udufucbudufucc 13551 u 13552 uaudufucc 13553 udufuccdudufuccfudufucc 13554 udufuccbudufucc 13555 udufuccc 14111 u 14112 uau 14113 udufu 14114 ubu 14115 uc 14121 u 14122 uauau 14123 uauduaufuau 14124 uaubuau 14125 uauc 14131 u 14132 uaudufu 14133 udufududufufudufu 14134 udufubudufu 14135 udufuc 14141 u 14142 uaubu 14143 ubudubufubu 14144 ubububu 14145 ubuc 14151 u 14152 uauc 14153 ucducfuc 14154 ucbuc 14155 ucc 14211 u 14212 uau 14213 udufu 14214 ubu 14215 uc 14221 u 14222 uauauaubu 14223 uauaubuduauaubufuauaubu 14224 uauaububuauaubu 14225 uauaubuc 14231 u 14232 uauaubuduaubufuaubu 14233 uaubuduaubufuaubuduaubuduaubufuaubufuaubuduaubufuaubu 14234 uaubuduaubufuaububuaubuduaubufuaubu 14235 uaubuduaubufuaubuc 14241 u 14242 uauaububuaubu 14243 uaububuaubuduaububuaubufuaububuaubu 14244 uaububuaububuaububuaubu 14245 uaububuaubuc 14251 u 14252 uauaubuc 14253 uaubucduaubucfuaubuc 14254 uaubucbuaubuc 14255 uaubucc 14311 u 14312 uau 14313 udufu 14314 ubu 14315 uc 14321 u 14322 uauaubudubufubu 14323 uaubudubufubuduaubudubufubufuaubudubufubu 14324 uaubudubufububuaubudubufubu 14325 uaubudubufubuc 14331 u 14332 uaubudubufubudubudubufubufubudubufubu 14333 ubudubufubudubudubufubufubudubufubudubudubufubudubudubufubufu +budubufubufubudubufubudubudubufubufubudubufubu 14334 ubudubufubudubudubufubufubudubufubububudubufubudubudubufubufu +budubufubu 14335 ubudubufubudubudubufubufubudubufubuc 14341 u 14342 uaubudubufubububudubufubu 14343 ubudubufubububudubufubudubudubufubububudubufubufubudubufububu +budubufubu 14344 ubudubufubububudubufubububudubufubububudubufubu 14345 ubudubufubububudubufubuc 14351 u 14352 uaubudubufubuc 14353 ubudubufubucdubudubufubucfubudubufubuc 14354 ubudubufubucbubudubufubuc 14355 ubudubufubucc 14411 u 14412 uau 14413 udufu 14414 ubu 14415 uc 14421 u 14422 uauaubububu 14423 uaubububuduaubububufuaubububu 14424 uaububububuaubububu 14425 uaubububuc 14431 u 14432 uaubububudubububufubububu 14433 ubububudubububufubububudubububudubububufubububufubububudububu +bufubububu 14434 ubububudubububufubububububububudubububufubububu 14435 ubububudubububufubububuc 14441 u 14442 uaubububububububu 14443 ubububububububudubububububububufubububububububu 14444 ubububububububububububububububu 14445 ubububububububuc 14451 u 14452 uaubububuc 14453 ubububucdubububucfubububuc 14454 ubububucbubububuc 14455 ubububucc 14511 u 14512 uau 14513 udufu 14514 ubu 14515 uc 14521 u 14522 uauaubuc 14523 uaubucduaubucfuaubuc 14524 uaubucbuaubuc 14525 uaubucc 14531 u 14532 uaubucdubucfubuc 14533 ubucdubucfubucdubucdubucfubucfubucdubucfubuc 14534 ubucdubucfubucbubucdubucfubuc 14535 ubucdubucfubucc 14541 u 14542 uaubucbubuc 14543 ubucbubucdubucbubucfubucbubuc 14544 ubucbubucbubucbubuc 14545 ubucbubucc 14551 u 14552 uaubucc 14553 ubuccdubuccfubucc 14554 ubuccbubucc 14555 ubuccc 15111 u 15112 uau 15113 udufu 15114 ubu 15115 uc 15121 u 15122 uauau 15123 uauduaufuau 15124 uaubuau 15125 uauc 15131 u 15132 uaudufu 15133 udufududufufudufu 15134 udufubudufu 15135 udufuc 15141 u 15142 uaubu 15143 ubudubufubu 15144 ubububu 15145 ubuc 15151 u 15152 uauc 15153 ucducfuc 15154 ucbuc 15155 ucc 15211 u 15212 uau 15213 udufu 15214 ubu 15215 uc 15221 u 15222 uauauauc 15223 uauaucduauaucfuauauc 15224 uauaucbuauauc 15225 uauaucc 15231 u 15232 uauaucduaucfuauc 15233 uaucduaucfuaucduaucduaucfuaucfuaucduaucfuauc 15234 uaucduaucfuaucbuaucduaucfuauc 15235 uaucduaucfuaucc 15241 u 15242 uauaucbuauc 15243 uaucbuaucduaucbuaucfuaucbuauc 15244 uaucbuaucbuaucbuauc 15245 uaucbuaucc 15251 u 15252 uauaucc 15253 uauccduauccfuaucc 15254 uauccbuaucc 15255 uauccc 15311 u 15312 uau 15313 udufu 15314 ubu 15315 uc 15321 u 15322 uauaucducfuc 15323 uaucducfucduaucducfucfuaucducfuc 15324 uaucducfucbuaucducfuc 15325 uaucducfucc 15331 u 15332 uaucducfucducducfucfucducfuc 15333 ucducfucducducfucfucducfucducducfucducducfucfucducfucfucducfu +cducducfucfucducfuc 15334 ucducfucducducfucfucducfucbucducfucducducfucfucducfuc 15335 ucducfucducducfucfucducfucc 15341 u 15342 uaucducfucbucducfuc 15343 ucducfucbucducfucducducfucbucducfucfucducfucbucducfuc 15344 ucducfucbucducfucbucducfucbucducfuc 15345 ucducfucbucducfucc 15351 u 15352 uaucducfucc 15353 ucducfuccducducfuccfucducfucc 15354 ucducfuccbucducfucc 15355 ucducfuccc 15411 u 15412 uau 15413 udufu 15414 ubu 15415 uc 15421 u 15422 uauaucbuc 15423 uaucbucduaucbucfuaucbuc 15424 uaucbucbuaucbuc 15425 uaucbucc 15431 u 15432 uaucbucducbucfucbuc 15433 ucbucducbucfucbucducbucducbucfucbucfucbucducbucfucbuc 15434 ucbucducbucfucbucbucbucducbucfucbuc 15435 ucbucducbucfucbucc 15441 u 15442 uaucbucbucbuc 15443 ucbucbucbucducbucbucbucfucbucbucbuc 15444 ucbucbucbucbucbucbucbuc 15445 ucbucbucbucc 15451 u 15452 uaucbucc 15453 ucbuccducbuccfucbucc 15454 ucbuccbucbucc 15455 ucbuccc 15511 u 15512 uau 15513 udufu 15514 ubu 15515 uc 15521 u 15522 uauaucc 15523 uauccduauccfuaucc 15524 uauccbuaucc 15525 uauccc 15531 u 15532 uauccduccfucc 15533 uccduccfuccduccduccfuccfuccduccfucc 15534 uccduccfuccbuccduccfucc 15535 uccduccfuccc 15541 u 15542 uauccbucc 15543 uccbuccduccbuccfuccbucc 15544 uccbuccbuccbucc 15545 uccbuccc 15551 u 15552 uauccc 15553 ucccducccfuccc 15554 ucccbuccc 15555 ucccc

There is no need to go any further than this since every needed combination of the numbers 1 to 5 appears. We can simply make longer matches of the above by sticking a + at the end of the whole group. This group, with all the levels combined, would look like:

(?:u|uau|uauau|uauauau|uauauaubu|uauauaubuau|uauauaubuauau|uauauaubuau +auau|uauauauc|uauauauduauauaufuauauau| uauauauduauaufuauau|uauauauduaufuau|uauauaudufu|uauaubu|uauaubuau|uaua +ubuauau|uauaubuauaubuauaubuauau|uauaubuauauc| uauaubuauauduauaubuauaufuauaubuauau|uauaubuaubuauaubuau|uauaubuaubuaub +uau|uauaubuauc|uauaubuauduauaubuaufuauaubuau| uauaubuauduaubuaufuaubuau|uauaububuauaubu|uauaububuaubu|uauaubububu|ua +uaubuc|uauaubuduauaubufuauaubu| uauaubuduaubufuaubu|uauaubudubufubu|uauauc|uauaucbuauauc|uauaucbuauc|u +auaucbuc|uauaucc|uauaucduauaucfuauauc| uauaucduaucfuauc|uauaucducfuc|uauauduauaufuauau|uauauduauaufuauaubuaua +uduauaufuauau|uauauduauaufuauauc| uauauduauaufuauauduauauduauaufuauaufuauauduauaufuauau|uauauduaufuau|ua +uauduaufuaubuauauduaufuau| uauauduaufuaubuauduaufuau|uauauduaufuauc|uauauduaufuauduauauduaufuaufu +auauduaufuau| uauauduaufuauduauduaufuaufuauduaufuau|uauaudufu|uauaudufubuauaudufu|ua +uaudufubuaudufu|uauaudufubudufu|uauaudufuc| uauaudufuduauaudufufuauaudufu|uauaudufuduaudufufuaudufu|uauaudufududuf +ufudufu|uaubu|uaubuau|uaubuaubuaubuau| uaubuaubuaubuaubuaubuaubuaubuau|uaubuaubuaubuauc|uaubuaubuaubuauduaubu +aubuaubuaufuaubuaubuaubuau|uaubuauc| uaubuaucbuaubuauc|uaubuaucc|uaubuaucduaubuaucfuaubuauc|uaubuauduaubuau +fuaubuau| uaubuauduaubuaufuaubuaubuaubuauduaubuaufuaubuau|uaubuauduaubuaufuaubua +uc| uaubuauduaubuaufuaubuauduaubuauduaubuaufuaubuaufuaubuauduaubuaufuaubua +u|uaububuaubu|uaububuaububuaububuaubu| uaububuaubuc|uaububuaubuduaububuaubufuaububuaubu|uaubububu|uaububububu +aubububu|uaubububububububu|uaubububuc| uaubububuduaubububufuaubububu|uaubububudubububufubububu|uaubuc|uaubucb +uaubuc|uaubucbubuc|uaubucc| uaubucduaubucfuaubuc|uaubucdubucfubuc|uaubuduaubufuaubu|uaubuduaubufua +ububuaubuduaubufuaubu|uaubuduaubufuaubuc| uaubuduaubufuaubuduaubuduaubufuaubufuaubuduaubufuaubu|uaubudubufubu|ua +ubudubufububuaubudubufubu| uaubudubufubububudubufubu|uaubudubufubuc|uaubudubufubuduaubudubufubufu +aubudubufubu| uaubudubufubudubudubufubufubudubufubu|uauc|uaucbuauc|uaucbuaucbuaucbua +uc|uaucbuaucc|uaucbuaucduaucbuaucfuaucbuauc| uaucbuc|uaucbucbuaucbuc|uaucbucbucbuc|uaucbucc|uaucbucduaucbucfuaucbuc +|uaucbucducbucfucbuc|uaucc|uauccbuaucc|uauccbucc| uauccc|uauccduauccfuaucc|uauccduccfucc|uaucduaucfuauc|uaucduaucfuaucbu +aucduaucfuauc|uaucduaucfuaucc| uaucduaucfuaucduaucduaucfuaucfuaucduaucfuauc|uaucducfuc|uaucducfucbuau +cducfuc|uaucducfucbucducfuc|uaucducfucc| uaucducfucduaucducfucfuaucducfuc|uaucducfucducducfucfucducfuc|uauduauf +uau|uauduaufuaubuauduaufuau| uauduaufuaubuauduaufuaubuauduaufuaubuauduaufuau|uauduaufuaubuauduaufua +uc| uauduaufuaubuauduaufuauduauduaufuaubuauduaufuaufuauduaufuaubuauduaufua +u|uauduaufuauc|uauduaufuaucbuauduaufuauc| uauduaufuaucc|uauduaufuaucduauduaufuaucfuauduaufuauc|uauduaufuauduaudu +aufuaufuauduaufuau| uauduaufuauduauduaufuaufuauduaufuaubuauduaufuauduauduaufuaufuauduaufua +u|uauduaufuauduauduaufuaufuauduaufuauc| uauduaufuauduauduaufuaufuauduaufuauduauduaufuauduauduaufuaufuauduaufua +ufuauduaufuauduauduaufuaufuauduaufuau|uaudufu| uaudufubuaudufu|uaudufubuaudufubuaudufubuaudufu|uaudufubuaudufuc|uaudu +fubuaudufuduaudufubuaudufufuaudufubuaudufu| uaudufubudufu|uaudufubudufubuaudufubudufu|uaudufubudufubudufubudufu|ua +udufubudufuc| uaudufubudufuduaudufubudufufuaudufubudufu|uaudufubudufududufubudufufud +ufubudufu|uaudufuc|uaudufucbuaudufuc| uaudufucbudufuc|uaudufucc|uaudufucduaudufucfuaudufuc|uaudufucdudufucfu +dufuc|uaudufuduaudufufuaudufu| uaudufuduaudufufuaudufubuaudufuduaudufufuaudufu|uaudufuduaudufufuauduf +uc| uaudufuduaudufufuaudufuduaudufuduaudufufuaudufufuaudufuduaudufufuauduf +u|uaudufududufufudufu| uaudufududufufudufubuaudufududufufudufu|uaudufududufufudufubudufududuf +ufudufu|uaudufududufufudufuc| uaudufududufufudufuduaudufududufufudufufuaudufududufufudufu|uaudufudud +ufufudufududufududufufudufufudufududufufudufu|ubu| ubububu|ubububububububu|ubububububububububububububububu|ububububububub +uc| ubububububububudubububububububufubububububububu|ubububuc|ubububucbubub +ubuc|ubububucc|ubububucdubububucfubububuc| ubububudubububufubububu|ubububudubububufubububububububudubububufububub +u|ubububudubububufubububuc| ubububudubububufubububudubububudubububufubububufubububudubububufububub +u|ubuc|ubucbubuc|ubucbubucbubucbubuc| ubucbubucc|ubucbubucdubucbubucfubucbubuc|ubucc|ubuccbubucc|ubuccc|ubuc +cdubuccfubucc|ubucdubucfubuc| ubucdubucfubucbubucdubucfubuc|ubucdubucfubucc|ubucdubucfubucdubucdubuc +fubucfubucdubucfubuc|ubudubufubu| ubudubufubububudubufubu|ubudubufubububudubufubububudubufubububudubufub +u|ubudubufubububudubufubuc| ubudubufubububudubufubudubudubufubububudubufubufubudubufubububudubufub +u|ubudubufubuc|ubudubufubucbubudubufubuc| ubudubufubucc|ubudubufubucdubudubufubucfubudubufubuc|ubudubufubudubudu +bufubufubudubufubu| ubudubufubudubudubufubufubudubufubububudubufubudubudubufubufubudubufub +u|ubudubufubudubudubufubufubudubufubuc| ubudubufubudubudubufubufubudubufubudubudubufubudubudubufubufubudubufub +ufubudubufubudubudubufubufubudubufubu|uc|ucbuc| ucbucbucbuc|ucbucbucbucbucbucbucbuc|ucbucbucbucc|ucbucbucbucducbucbucb +ucfucbucbucbuc|ucbucc|ucbuccbucbucc|ucbuccc| ucbuccducbuccfucbucc|ucbucducbucfucbuc|ucbucducbucfucbucbucbucducbucfu +cbuc|ucbucducbucfucbucc| ucbucducbucfucbucducbucducbucfucbucfucbucducbucfucbuc|ucc|uccbucc|uccb +uccbuccbucc|uccbuccc|uccbuccduccbuccfuccbucc|uccc| ucccbuccc|ucccc|ucccducccfuccc|uccduccfucc|uccduccfuccbuccduccfucc|ucc +duccfuccc|uccduccfuccduccduccfuccfuccduccfucc|ucducfuc| ucducfucbucducfuc|ucducfucbucducfucbucducfucbucducfuc|ucducfucbucducfu +cc|ucducfucbucducfucducducfucbucducfucfucducfucbucducfuc| ucducfucc|ucducfuccbucducfucc|ucducfuccc|ucducfuccducducfuccfucducfucc +|ucducfucducducfucfucducfuc| ucducfucducducfucfucducfucbucducfucducducfucfucducfuc|ucducfucducducfu +cfucducfucc| ucducfucducducfucfucducfucducducfucducducfucfucducfucfucducfucducducfu +cfucducfuc|udufu|udufubudufu|udufubudufubudufubudufu| udufubudufubudufubudufubudufubudufubudufubudufu|udufubudufubudufubuduf +uc| udufubudufubudufubudufududufubudufubudufubudufufudufubudufubudufubuduf +u|udufubudufuc|udufubudufucbudufubudufuc| udufubudufucc|udufubudufucdudufubudufucfudufubudufuc|udufubudufududufu +budufufudufubudufu| udufubudufududufubudufufudufubudufubudufubudufududufubudufufudufubuduf +u|udufubudufududufubudufufudufubudufuc| udufubudufududufubudufufudufubudufududufubudufududufubudufufudufubuduf +ufudufubudufududufubudufufudufubudufu|udufuc| udufucbudufuc|udufucbudufucbudufucbudufuc|udufucbudufucc|udufucbudufuc +dudufucbudufucfudufucbudufuc|udufucc|udufuccbudufucc| udufuccc|udufuccdudufuccfudufucc|udufucdudufucfudufuc|udufucdudufucfud +ufucbudufucdudufucfudufuc|udufucdudufucfudufucc| udufucdudufucfudufucdudufucdudufucfudufucfudufucdudufucfudufuc|udufudu +dufufudufu|udufududufufudufubudufududufufudufu| udufududufufudufubudufududufufudufubudufududufufudufubudufududufufuduf +u|udufududufufudufubudufududufufudufuc| udufududufufudufubudufududufufudufududufududufufudufubudufududufufuduf +ufudufududufufudufubudufududufufudufu| udufududufufudufuc|udufududufufudufucbudufududufufudufuc|udufududufufu +dufucc| udufududufufudufucdudufududufufudufucfudufududufufudufuc|udufududufufu +dufududufududufufudufufudufududufufudufu| udufududufufudufududufududufufudufufudufududufufudufubudufududufufuduf +ududufududufufudufufudufududufufudufu| udufududufufudufududufududufufudufufudufududufufudufuc| udufududufufudufududufududufufudufufudufududufufudufududufududufufuduf +ududufududufufudufufudufududufufudufufudufududufufudufududufududufufu +dufufudufududufufudufu)+

(I sorted them and removed duplicates. I also wrote a quick script to produce all these substitutions)

I do not know what the practical limits are for the length of a regular expression, and this may or may not exceed it; but it certainly may be said that this is abusing regular expressions. I have tried it on several test expressions, and it seems to work, but I can see that it is very big and angry looking, and I don’t think I want to get it mad at me.

By the way, the letters in the expression above are shorthand for the following expressions already defined in the C# language specification

e $expression u $unary_expression a $assignment_operator d ? f : b (?:\|\||&&|$bar|\^|$ampersand|$expression_equality_operator|$expr +ession_relational_operator|$expression_shift_operator|$plus|$minus|\* +|\/|%) c is $built_in_type

so the actual regex above would be much more hideous yet with these put in. Optional spacing would make it even worse. One thing that needs fixing is that expressions with the number 1 in them probably should not be included in the +. For example, the very first alternation, u, should not have the + applied to it; uuuuu is not a valid expression. I am sure there are other problems lurking. All this is for a set of five regexes, four recursive for a given expression. Make it ten regexes, and I wouldn’t have the bandwidth to even discuss the answer.

All this to just define an regular expression that matches a C# expression.

P.S., I tried spoiler tags to hide some of the length of this, but it did not work well with such large chunks.


In reply to Warning about playing with matches by ExReg

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.