Skip to content

Instantly share code, notes, and snippets.

@masakielastic
Last active August 29, 2015 14:11
Show Gist options
  • Save masakielastic/fdbce16edbb532853d0d to your computer and use it in GitHub Desktop.
Save masakielastic/fdbce16edbb532853d0d to your computer and use it in GitHub Desktop.
<?php
$array = [
0x300,0x301,0x302,0x303,0x304,0x305,0x306,0x307,0x308,0x309,0x30A,0x30B,0x30C,0x30D,0x30E,0x30F,0x310,0x311,0x312,0x313,0x314,0x315,0x316,0x317,0x318,0x319,0x31A,0x31B,0x31C,0x31D,0x31E,0x31F,0x320,0x321,0x322,0x323,0x324,0x325,0x326,0x327,0x328,0x329,0x32A,0x32B,0x32C,0x32D,0x32E,0x32F,0x330,0x331,0x332,0x333,0x334,0x335,0x336,0x337,0x338,0x339,0x33A,0x33B,0x33C,0x33D,0x33E,0x33F,0x340,0x341,0x342,0x343,0x344,0x345,0x346,0x347,0x348,0x349,0x34A,0x34B,0x34C,0x34D,0x34E,0x34F,0x350,0x351,0x352,0x353,0x354,0x355,0x356,0x357,0x358,0x359,0x35A,0x35B,0x35C,0x35D,0x35E,0x35F,0x360,0x361,0x362,0x363,0x364,0x365,0x366,0x367,0x368,0x369,0x36A,0x36B,0x36C,0x36D,0x36E,0x36F,0x483,0x484,0x485,0x486,0x487,0x488,0x489,0x591,0x592,0x593,0x594,0x595,0x596,0x597,0x598,0x599,0x59A,0x59B,0x59C,0x59D,0x59E,0x59F,0x5A0,0x5A1,0x5A2,0x5A3,0x5A4,0x5A5,0x5A6,0x5A7,0x5A8,0x5A9,0x5AA,0x5AB,0x5AC,0x5AD,0x5AE,0x5AF,0x5B0,0x5B1,0x5B2,0x5B3,0x5B4,0x5B5,0x5B6,0x5B7,0x5B8,0x5B9,0x5BA,0x5BB,0x5BC,0x5BD,0x5BF,0x5C1,0x5C2,0x5C4,0x5C5,0x5C7,0x610,0x611,0x612,0x613,0x614,0x615,0x616,0x617,0x618,0x619,0x61A,0x64B,0x64C,0x64D,0x64E,0x64F,0x650,0x651,0x652,0x653,0x654,0x655,0x656,0x657,0x658,0x659,0x65A,0x65B,0x65C,0x65D,0x65E,0x65F,0x670,0x6D6,0x6D7,0x6D8,0x6D9,0x6DA,0x6DB,0x6DC,0x6DF,0x6E0,0x6E1,0x6E2,0x6E3,0x6E4,0x6E7,0x6E8,0x6EA,0x6EB,0x6EC,0x6ED,0x711,0x730,0x731,0x732,0x733,0x734,0x735,0x736,0x737,0x738,0x739,0x73A,0x73B,0x73C,0x73D,0x73E,0x73F,0x740,0x741,0x742,0x743,0x744,0x745,0x746,0x747,0x748,0x749,0x74A,0x7A6,0x7A7,0x7A8,0x7A9,0x7AA,0x7AB,0x7AC,0x7AD,0x7AE,0x7AF,0x7B0,0x7EB,0x7EC,0x7ED,0x7EE,0x7EF,0x7F0,0x7F1,0x7F2,0x7F3,0x816,0x817,0x818,0x819,0x81B,0x81C,0x81D,0x81E,0x81F,0x820,0x821,0x822,0x823,0x825,0x826,0x827,0x829,0x82A,0x82B,0x82C,0x82D,0x859,0x85A,0x85B,0x8E4,0x8E5,0x8E6,0x8E7,0x8E8,0x8E9,0x8EA,0x8EB,0x8EC,0x8ED,0x8EE,0x8EF,0x8F0,0x8F1,0x8F2,0x8F3,0x8F4,0x8F5,0x8F6,0x8F7,0x8F8,0x8F9,0x8FA,0x8FB,0x8FC,0x8FD,0x8FE,0x8FF,0x900,0x901,0x902,0x93A,0x93C,0x941,0x942,0x943,0x944,0x945,0x946,0x947,0x948,0x94D,0x951,0x952,0x953,0x954,0x955,0x956,0x957,0x962,0x963,0x981,0x9BC,0x9BE,0x9C1,0x9C2,0x9C3,0x9C4,0x9CD,0x9D7,0x9E2,0x9E3,0xA01,0xA02,0xA3C,0xA41,0xA42,0xA47,0xA48,0xA4B,0xA4C,0xA4D,0xA51,0xA70,0xA71,0xA75,0xA81,0xA82,0xABC,0xAC1,0xAC2,0xAC3,0xAC4,0xAC5,0xAC7,0xAC8,0xACD,0xAE2,0xAE3,0xB01,0xB3C,0xB3E,0xB3F,0xB41,0xB42,0xB43,0xB44,0xB4D,0xB56,0xB57,0xB62,0xB63,0xB82,0xBBE,0xBC0,0xBCD,0xBD7,0xC00,0xC3E,0xC3F,0xC40,0xC46,0xC47,0xC48,0xC4A,0xC4B,0xC4C,0xC4D,0xC55,0xC56,0xC62,0xC63,0xC81,0xCBC,0xCBF,0xCC2,0xCC6,0xCCC,0xCCD,0xCD5,0xCD6,0xCE2,0xCE3,0xD01,0xD3E,0xD41,0xD42,0xD43,0xD44,0xD4D,0xD57,0xD62,0xD63,0xDCA,0xDCF,0xDD2,0xDD3,0xDD4,0xDD6,0xDDF,0xE31,0xE34,0xE35,0xE36,0xE37,0xE38,0xE39,0xE3A,0xE47,0xE48,0xE49,0xE4A,0xE4B,0xE4C,0xE4D,0xE4E,0xEB1,0xEB4,0xEB5,0xEB6,0xEB7,0xEB8,0xEB9,0xEBB,0xEBC,0xEC8,0xEC9,0xECA,0xECB,0xECC,0xECD,0xF18,0xF19,0xF35,0xF37,0xF39,0xF71,0xF72,0xF73,0xF74,0xF75,0xF76,0xF77,0xF78,0xF79,0xF7A,0xF7B,0xF7C,0xF7D,0xF7E,0xF80,0xF81,0xF82,0xF83,0xF84,0xF86,0xF87,0xF8D,0xF8E,0xF8F,0xF90,0xF91,0xF92,0xF93,0xF94,0xF95,0xF96,0xF97,0xF99,0xF9A,0xF9B,0xF9C,0xF9D,0xF9E,0xF9F,0xFA0,0xFA1,0xFA2,0xFA3,0xFA4,0xFA5,0xFA6,0xFA7,0xFA8,0xFA9,0xFAA,0xFAB,0xFAC,0xFAD,0xFAE,0xFAF,0xFB0,0xFB1,0xFB2,0xFB3,0xFB4,0xFB5,0xFB6,0xFB7,0xFB8,0xFB9,0xFBA,0xFBB,0xFBC,0xFC6,0x102D,0x102E,0x102F,0x1030,0x1032,0x1033,0x1034,0x1035,0x1036,0x1037,0x1039,0x103A,0x103D,0x103E,0x1058,0x1059,0x105E,0x105F,0x1060,0x1071,0x1072,0x1073,0x1074,0x1082,0x1085,0x1086,0x108D,0x109D,0x135D,0x135E,0x135F,0x1712,0x1713,0x1714,0x1732,0x1733,0x1734,0x1752,0x1753,0x1772,0x1773,0x17B4,0x17B5,0x17B7,0x17B8,0x17B9,0x17BA,0x17BB,0x17BC,0x17BD,0x17C6,0x17C9,0x17CA,0x17CB,0x17CC,0x17CD,0x17CE,0x17CF,0x17D0,0x17D1,0x17D2,0x17D3,0x17DD,0x180B,0x180C,0x180D,0x18A9,0x1920,0x1921,0x1922,0x1927,0x1928,0x1932,0x1939,0x193A,0x193B,0x1A17,0x1A18,0x1A1B,0x1A56,0x1A58,0x1A59,0x1A5A,0x1A5B,0x1A5C,0x1A5D,0x1A5E,0x1A60,0x1A62,0x1A65,0x1A66,0x1A67,0x1A68,0x1A69,0x1A6A,0x1A6B,0x1A6C,0x1A73,0x1A74,0x1A75,0x1A76,0x1A77,0x1A78,0x1A79,0x1A7A,0x1A7B,0x1A7C,0x1A7F,0x1AB0,0x1AB1,0x1AB2,0x1AB3,0x1AB4,0x1AB5,0x1AB6,0x1AB7,0x1AB8,0x1AB9,0x1ABA,0x1ABB,0x1ABC,0x1ABD,0x1ABE,0x1B00,0x1B01,0x1B02,0x1B03,0x1B34,0x1B36,0x1B37,0x1B38,0x1B39,0x1B3A,0x1B3C,0x1B42,0x1B6B,0x1B6C,0x1B6D,0x1B6E,0x1B6F,0x1B70,0x1B71,0x1B72,0x1B73,0x1B80,0x1B81,0x1BA2,0x1BA3,0x1BA4,0x1BA5,0x1BA8,0x1BA9,0x1BAB,0x1BAC,0x1BAD,0x1BE6,0x1BE8,0x1BE9,0x1BED,0x1BEF,0x1BF0,0x1BF1,0x1C2C,0x1C2D,0x1C2E,0x1C2F,0x1C30,0x1C31,0x1C32,0x1C33,0x1C36,0x1C37,0x1CD0,0x1CD1,0x1CD2,0x1CD4,0x1CD5,0x1CD6,0x1CD7,0x1CD8,0x1CD9,0x1CDA,0x1CDB,0x1CDC,0x1CDD,0x1CDE,0x1CDF,0x1CE0,0x1CE2,0x1CE3,0x1CE4,0x1CE5,0x1CE6,0x1CE7,0x1CE8,0x1CED,0x1CF4,0x1CF8,0x1CF9,0x1DC0,0x1DC1,0x1DC2,0x1DC3,0x1DC4,0x1DC5,0x1DC6,0x1DC7,0x1DC8,0x1DC9,0x1DCA,0x1DCB,0x1DCC,0x1DCD,0x1DCE,0x1DCF,0x1DD0,0x1DD1,0x1DD2,0x1DD3,0x1DD4,0x1DD5,0x1DD6,0x1DD7,0x1DD8,0x1DD9,0x1DDA,0x1DDB,0x1DDC,0x1DDD,0x1DDE,0x1DDF,0x1DE0,0x1DE1,0x1DE2,0x1DE3,0x1DE4,0x1DE5,0x1DE6,0x1DE7,0x1DE8,0x1DE9,0x1DEA,0x1DEB,0x1DEC,0x1DED,0x1DEE,0x1DEF,0x1DF0,0x1DF1,0x1DF2,0x1DF3,0x1DF4,0x1DF5,0x1DFC,0x1DFD,0x1DFE,0x1DFF,0x200C,0x200D,0x20D0,0x20D1,0x20D2,0x20D3,0x20D4,0x20D5,0x20D6,0x20D7,0x20D8,0x20D9,0x20DA,0x20DB,0x20DC,0x20DD,0x20DE,0x20DF,0x20E0,0x20E1,0x20E2,0x20E3,0x20E4,0x20E5,0x20E6,0x20E7,0x20E8,0x20E9,0x20EA,0x20EB,0x20EC,0x20ED,0x20EE,0x20EF,0x20F0,0x2CEF,0x2CF0,0x2CF1,0x2D7F,0x2DE0,0x2DE1,0x2DE2,0x2DE3,0x2DE4,0x2DE5,0x2DE6,0x2DE7,0x2DE8,0x2DE9,0x2DEA,0x2DEB,0x2DEC,0x2DED,0x2DEE,0x2DEF,0x2DF0,0x2DF1,0x2DF2,0x2DF3,0x2DF4,0x2DF5,0x2DF6,0x2DF7,0x2DF8,0x2DF9,0x2DFA,0x2DFB,0x2DFC,0x2DFD,0x2DFE,0x2DFF,0x302A,0x302B,0x302C,0x302D,0x302E,0x302F,0x3099,0x309A,0xA66F,0xA670,0xA671,0xA672,0xA674,0xA675,0xA676,0xA677,0xA678,0xA679,0xA67A,0xA67B,0xA67C,0xA67D,0xA69F,0xA6F0,0xA6F1,0xA802,0xA806,0xA80B,0xA825,0xA826,0xA8C4,0xA8E0,0xA8E1,0xA8E2,0xA8E3,0xA8E4,0xA8E5,0xA8E6,0xA8E7,0xA8E8,0xA8E9,0xA8EA,0xA8EB,0xA8EC,0xA8ED,0xA8EE,0xA8EF,0xA8F0,0xA8F1,0xA926,0xA927,0xA928,0xA929,0xA92A,0xA92B,0xA92C,0xA92D,0xA947,0xA948,0xA949,0xA94A,0xA94B,0xA94C,0xA94D,0xA94E,0xA94F,0xA950,0xA951,0xA980,0xA981,0xA982,0xA9B3,0xA9B6,0xA9B7,0xA9B8,0xA9B9,0xA9BC,0xA9E5,0xAA29,0xAA2A,0xAA2B,0xAA2C,0xAA2D,0xAA2E,0xAA31,0xAA32,0xAA35,0xAA36,0xAA43,0xAA4C,0xAA7C,0xAAB0,0xAAB2,0xAAB3,0xAAB4,0xAAB7,0xAAB8,0xAABE,0xAABF,0xAAC1,0xAAEC,0xAAED,0xAAF6,0xABE5,0xABE8,0xABED,0xFB1E,0xFE00,0xFE01,0xFE02,0xFE03,0xFE04,0xFE05,0xFE06,0xFE07,0xFE08,0xFE09,0xFE0A,0xFE0B,0xFE0C,0xFE0D,0xFE0E,0xFE0F,0xFE20,0xFE21,0xFE22,0xFE23,0xFE24,0xFE25,0xFE26,0xFE27,0xFE28,0xFE29,0xFE2A,0xFE2B,0xFE2C,0xFE2D,0xFF9E,0xFF9F,0x101FD,0x102E0,0x10376,0x10377,0x10378,0x10379,0x1037A,0x10A01,0x10A02,0x10A03,0x10A05,0x10A06,0x10A0C,0x10A0D,0x10A0E,0x10A0F,0x10A38,0x10A39,0x10A3A,0x10A3F,0x10AE5,0x10AE6,0x11001,0x11038,0x11039,0x1103A,0x1103B,0x1103C,0x1103D,0x1103E,0x1103F,0x11040,0x11041,0x11042,0x11043,0x11044,0x11045,0x11046,0x1107F,0x11080,0x11081,0x110B3,0x110B4,0x110B5,0x110B6,0x110B9,0x110BA,0x11100,0x11101,0x11102,0x11127,0x11128,0x11129,0x1112A,0x1112B,0x1112D,0x1112E,0x1112F,0x11130,0x11131,0x11132,0x11133,0x11134,0x11173,0x11180,0x11181,0x111B6,0x111B7,0x111B8,0x111B9,0x111BA,0x111BB,0x111BC,0x111BD,0x111BE,0x1122F,0x11230,0x11231,0x11234,0x11236,0x11237,0x112DF,0x112E3,0x112E4,0x112E5,0x112E6,0x112E7,0x112E8,0x112E9,0x112EA,0x11301,0x1133C,0x1133E,0x11340,0x11357,0x11366,0x11367,0x11368,0x11369,0x1136A,0x1136B,0x1136C,0x11370,0x11371,0x11372,0x11373,0x11374,0x114B0,0x114B3,0x114B4,0x114B5,0x114B6,0x114B7,0x114B8,0x114BA,0x114BD,0x114BF,0x114C0,0x114C2,0x114C3,0x115AF,0x115B2,0x115B3,0x115B4,0x115B5,0x115BC,0x115BD,0x115BF,0x115C0,0x11633,0x11634,0x11635,0x11636,0x11637,0x11638,0x11639,0x1163A,0x1163D,0x1163F,0x11640,0x116AB,0x116AD,0x116B0,0x116B1,0x116B2,0x116B3,0x116B4,0x116B5,0x116B7,0x16AF0,0x16AF1,0x16AF2,0x16AF3,0x16AF4,0x16B30,0x16B31,0x16B32,0x16B33,0x16B34,0x16B35,0x16B36,0x16F8F,0x16F90,0x16F91,0x16F92,0x1BC9D,0x1BC9E,0x1D165,0x1D167,0x1D168,0x1D169,0x1D16E,0x1D16F,0x1D170,0x1D171,0x1D172,0x1D17B,0x1D17C,0x1D17D,0x1D17E,0x1D17F,0x1D180,0x1D181,0x1D182,0x1D185,0x1D186,0x1D187,0x1D188,0x1D189,0x1D18A,0x1D18B,0x1D1AA,0x1D1AB,0x1D1AC,0x1D1AD,0x1D242,0x1D243,0x1D244,0x1E8D0,0x1E8D1,0x1E8D2,0x1E8D3,0x1E8D4,0x1E8D5,0x1E8D6,0xE0100,0xE0101,0xE0102,0xE0103,0xE0104,0xE0105,0xE0106,0xE0107,0xE0108,0xE0109,0xE010A,0xE010B,0xE010C,0xE010D,0xE010E,0xE010F,0xE0110,0xE0111,0xE0112,0xE0113,0xE0114,0xE0115,0xE0116,0xE0117,0xE0118,0xE0119,0xE011A,0xE011B,0xE011C,0xE011D,0xE011E,0xE011F,0xE0120,0xE0121,0xE0122,0xE0123,0xE0124,0xE0125,0xE0126,0xE0127,0xE0128,0xE0129,0xE012A,0xE012B,0xE012C,0xE012D,0xE012E,0xE012F,0xE0130,0xE0131,0xE0132,0xE0133,0xE0134,0xE0135,0xE0136,0xE0137,0xE0138,0xE0139,0xE013A,0xE013B,0xE013C,0xE013D,0xE013E,0xE013F,0xE0140,0xE0141,0xE0142,0xE0143,0xE0144,0xE0145,0xE0146,0xE0147,0xE0148,0xE0149,0xE014A,0xE014B,0xE014C,0xE014D,0xE014E,0xE014F,0xE0150,0xE0151,0xE0152,0xE0153,0xE0154,0xE0155,0xE0156,0xE0157,0xE0158,0xE0159,0xE015A,0xE015B,0xE015C,0xE015D,0xE015E,0xE015F,0xE0160,0xE0161,0xE0162,0xE0163,0xE0164,0xE0165,0xE0166,0xE0167,0xE0168,0xE0169,0xE016A,0xE016B,0xE016C,0xE016D,0xE016E,0xE016F,0xE0170,0xE0171,0xE0172,0xE0173,0xE0174,0xE0175,0xE0176,0xE0177,0xE0178,0xE0179,0xE017A,0xE017B,0xE017C,0xE017D,0xE017E,0xE017F,0xE0180,0xE0181,0xE0182,0xE0183,0xE0184,0xE0185,0xE0186,0xE0187,0xE0188,0xE0189,0xE018A,0xE018B,0xE018C,0xE018D,0xE018E,0xE018F,0xE0190,0xE0191,0xE0192,0xE0193,0xE0194,0xE0195,0xE0196,0xE0197,0xE0198,0xE0199,0xE019A,0xE019B,0xE019C,0xE019D,0xE019E,0xE019F,0xE01A0,0xE01A1,0xE01A2,0xE01A3,0xE01A4,0xE01A5,0xE01A6,0xE01A7,0xE01A8,0xE01A9,0xE01AA,0xE01AB,0xE01AC,0xE01AD,0xE01AE,0xE01AF,0xE01B0,0xE01B1,0xE01B2,0xE01B3,0xE01B4,0xE01B5,0xE01B6,0xE01B7,0xE01B8,0xE01B9,0xE01BA,0xE01BB,0xE01BC,0xE01BD,0xE01BE,0xE01BF,0xE01C0,0xE01C1,0xE01C2,0xE01C3,0xE01C4,0xE01C5,0xE01C6,0xE01C7,0xE01C8,0xE01C9,0xE01CA,0xE01CB,0xE01CC,0xE01CD,0xE01CE,0xE01CF,0xE01D0,0xE01D1,0xE01D2,0xE01D3,0xE01D4,0xE01D5,0xE01D6,0xE01D7,0xE01D8,0xE01D9,0xE01DA,0xE01DB,0xE01DC,0xE01DD,0xE01DE,0xE01DF,0xE01E0,0xE01E1,0xE01E2,0xE01E3,0xE01E4,0xE01E5,0xE01E6,0xE01E7,0xE01E8,0xE01E9,0xE01EA,0xE01EB,0xE01EC,0xE01ED,0xE01EE,0xE01EF
];
$str = "葛\xF3\xA0\x84\x81飾区";
$regex = getRegex($array);
preg_match($regex, $str, $matches);
var_dump(bin2hex($matches[0]));
function getRegex($array) {
$count = count($array);
$marker = 0;
$should_break = true;
$regex = '';
for ($i = 0; $i < $count; ++$i) {
$previous = $array[$i];
$current = isset($array[$i + 1]) ? $array[$i + 1] : null;
if ($current !== null && $previous + 1 === $current) {
$should_break = false;
} else {
$should_break = true;
}
if ($should_break || $current === null) {
$prefix = $regex === '' ? '' : '|';
if ($marker === $previous) {
$regex .= $prefix.'\x{'.dechex($previous).'}';
} else {
$regex .= $prefix.'[\x{'.dechex($marker).'}-\x{'.dechex($previous).'}]';
}
$marker = $current;
}
}
$regex = '/'.$regex.'/u';
return $regex;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment