दिलचस्प पोस्ट
Socket.io में RedisStore का उपयोग करने के उदाहरण सूची में अधिकतम मान और इसका सूचक पाने का पायथनिक तरीका है? आईओएस 7 में स्टेटस बार चल रहा है डुप्लिकेट के साथ रैंडम संख्या जनरेटर REST नेस्टेड संसाधनों के लिए सर्वोत्तम पद्धतियां क्या हैं नवीनतम एंड्रॉइड सपोर्ट लाइब्रेरी के साथ पीछे के संगत वेक्टर ड्रॉएबल का सही उपयोग कैसे करें? वसंत में स्टार्टअप पर विधि निष्पादित करें माइग्रेशन के माध्यम से कॉलम में एक डिफ़ॉल्ट मान जोड़ें asp.net mvc वस्तु को जिंदा रखने, जानकारी क्या कोई पायथन भाषा विनिर्देश है? जांचें कि दो सूचियां समान हैं SMTPHandler के साथ Python लॉगिंग मेमोरीहैंडलर में आउटपुट कोलेटेड एक जेएनआई प्रोजेक्ट में एक असंतुष्ट लिंक एंटर (निर्भर पुस्तकालयों को नहीं मिल सकता) को कैसे ठीक करें वर्तमान फ़ाइल का नाम gulp.src में प्राप्त करें () ACCESS_COARSE_LOCATION अनुमति एंड्रॉइड पर एक सेल टॉवर परिशुद्धता देता है

एक संख्यात्मक सीमा को सत्यापित करने के लिए नियमित अभिव्यक्ति का उपयोग करना

मेरा इनपुट नंबर एक int है लेकिन इनपुट नंबर -2055 से 2055 तक की सीमा में होना चाहिए और मैं नियमित अभिव्यक्ति का उपयोग करके इसे देखना चाहता हूं।

तो क्या यह देखने के लिए नियमित अभिव्यक्ति लिखने के लिए वैसे भी कोई संख्या है (2055, 2055) या नहीं?

यह जांचना आसान है कि बयान अगर संख्या रेंज में है या नहीं लेकिन मैं एक दुभाषिया लिख ​​रहा हूं इसलिए मुझे इनपुट संख्या की जांच करने के लिए regex का उपयोग करना चाहिए

Solutions Collecting From Web of "एक संख्यात्मक सीमा को सत्यापित करने के लिए नियमित अभिव्यक्ति का उपयोग करना"

एक संख्यात्मक सीमा को सत्यापित करने के लिए नियमित अभिव्यक्ति का उपयोग करना

स्पष्ट होना: जब एक सरल अगर बयान पर्याप्त होगा

 if(num < -2055 || num > 2055) { throw new IllegalArgumentException("num (" + num + ") must be between -2055 and 2055"); } 

संख्यात्मक श्रेणियों को मान्य करने के लिए नियमित अभिव्यक्ति का उपयोग करना अनुशंसित नहीं है।

इसके अलावा, चूंकि नियमित अभिव्यक्ति स्ट्रिंग्स का विश्लेषण करते हैं, इसलिए जांचने से पहले संख्याओं को पहले स्ट्रिंग में अनुवाद करना होगा। एक अपवाद तब होता है जब संख्या पहले से ही एक स्ट्रिंग होती है, जैसे कंसोल से उपयोगकर्ता इनपुट प्राप्त करते समय

(यह सुनिश्चित करने के लिए कि स्ट्रिंग के साथ शुरू करने के लिए एक संख्या है, आप org.apache.commons.lang3.math. NumberUtils # isNumber(s) उपयोग कर सकते हैं org.apache.commons.lang3.math. NumberUtils # isNumber(s) )

इस के बावजूद, नियमित अभिव्यक्ति के साथ संख्या श्रेणियों को सत्यापित करने के लिए दिलचस्प और शिक्षाप्रद है।

(इस उत्तर में दिए गए लिंक स्टैक अतिप्रवाह नियमित अभिव्यक्ति पूछे जाने वाले प्रश्न से आते हैं।)

एक नंबर रेंज

नियम: एक नंबर ठीक 15 होना चाहिए।

सरलतम सीमा है यह मैच करने के लिए एक regex है

 \b15\b 

8215242 अंदर 15 से मेल खाने से बचने के लिए शब्द सीमाएं आवश्यक हैं

दो नंबर रेंज

नियम: संख्या 15 और 16 बीच होनी चाहिए। यहां तीन संभावित regexes हैं:

 \b(15|16)\b \b1(5|6)\b \b1[5-6]\b 

(समूह "या" के लिए आवश्यक हैं, लेकिन वे गैर-कैप्चरिंग हो सकते हैं: \b(?:15|16)\b )

शून्य के आसपास एक संख्या श्रेणी "मिरर"

नियम: संख्या -12 और 12 बीच होना चाहिए

यहां 0 से 12 लिए एक regex है, केवल सकारात्मक:

 \b(\d|1[0-2])\b 

नि: शुल्क से स्थान दिया गया:

 \b( //The beginning of a word (or number), followed by either \d // Any digit 0 through 9 | //Or 1[0-2] // A 1 followed by any digit between 0 and 2. )\b //The end of a word 

नकारात्मक और सकारात्मक दोनों के लिए यह काम करना प्रारंभ में एक वैकल्पिक डैश जोड़ने के रूप में सरल है:

 -?\b(\d|1[0-2])\b 

(यह मानता है कि कोई अनुचित अक्षर डैश से पहले नहीं हैं।)

नकारात्मक संख्याओं को मना करने के लिए, एक नकारात्मक नजरिए आवश्यक है:

 (?<!-)\b(\d|1[0-2])\b 

देखने के बाहर छोड़ने से 11 में 11 मैच होगा। (इस पोस्ट में पहला उदाहरण यह जोड़ा जाना चाहिए।)

नोट: \d बनाम [0-9]

सभी regex flavors के साथ संगत होने के लिए, सभी \d -s को [0-9] बदलना चाहिए । उदाहरण के लिए, .NET गैर एएससीआईआई संख्याओं को समझता है, जैसे कि विभिन्न भाषाओं में \d लिए कानूनी मान पिछली उदाहरण के लिए, संक्षेप के लिए, यह \d रूप में छोड़ा गया है।

( @TimPietzcker के लिए धन्यवाद के साथ)

तीन अंकों के साथ, लेकिन शून्य के बराबर पहला अंक

नियम: 0 और 400 बीच होना चाहिए

एक संभावित regex:

 (?<!-)\b([1-3]?\d{1,2}|400)\b 

नि: शुल्क स्थान:

  (?<!-) //Something not preceded by a dash \b( //Word-start, followed by either [1-3]? // No digit, or the digit 1, 2, or 3 \d{1,2} // Followed by one or two digits (between 0 and 9) | //Or 400 // The number 400 )\b //Word-end 

एक और संभावना है जिसका उपयोग कभी नहीं किया जाना चाहिए:

 \b(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223|224|225|226|227|228|229|230|231|232|233|234|235|236|237|238|239|240|241|242|243|244|245|246|247|248|249|250|251|252|253|254|255|256|257|258|259|260|261|262|263|264|265|266|267|268|269|270|271|272|273|274|275|276|277|278|279|280|281|282|283|284|285|286|287|288|289|290|291|292|293|294|295|296|297|298|299|300|301|302|303|304|305|306|307|308|309|310|311|312|313|314|315|316|317|318|319|320|321|322|323|324|325|326|327|328|329|330|331|332|333|334|335|336|337|338|339|340|341|342|343|344|345|346|347|348|349|350|351|352|353|354|355|356|357|358|359|360|361|362|363|364|365|366|367|368|369|370|371|372|373|374|375|376|377|378|379|380|381|382|383|384|385|386|387|388|389|390|391|392|393|394|395|396|397|398|399|400)\b 

अंतिम उदाहरण: चार अंक, शून्य के आसपास नजर आते हैं, जो शून्य के साथ समाप्त नहीं होता है

नियम: -2055 और 2055 बीच होना चाहिए

यह स्टैक ओवरफ्लो पर एक प्रश्न से है

regex:

 (-?\b(?:20(?:5[0-5]|[0-4][0-9])|1[0-9]{3}|[1-9][0-9]{0,2}|(?<!-)0+))\b 

नियमित अभिव्यक्ति दृश्य

डीबगजेक्स डेमो

नि: शुल्क से स्थान दिया गया:

 ( //Capture group for the entire number -?\b //Optional dash, followed by a word (number) boundary (?:20 //Followed by "20", which is followed by one of (?:5[0-5] //50 through 55 | //or [0-4][0-9]) //00 through 49 | //or 1[0-9]{3} //a one followed by any three digits | //or [1-9][0-9]{0,2} //1-9 followed by 0 through 2 of any digit | //or (?<!-)0+ //one-or-more zeros *not* preceded by a dash ) //end "or" non-capture group )\b //End number capture group, followed by a word-bound 

(डिबगिंग सहायता के लिए प्लास्पापावर और कासिमिर एट हिपोलिएट के लिए धन्यवाद)

अंतिम नोट

आप कैप्चरिंग कर रहे हैं उसके आधार पर, यह संभव है कि सभी उप-समूह को गैर-कैप्चर समूहों में बनाया जाना चाहिए। उदाहरण के लिए, यह:

 (-?\b(?:20(?:5[0-5]|[0-4][0-9])|1?[0-9]{1,3})\b) 

इसके अलावा:

 -?\b(20(5[0-5]|[0-4][0-9])|1?[0-9]{1,3})\b 

उदाहरण जावा कार्यान्वयन

  import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang.math.NumberUtils; /** <P>Confirm a user-input number is a valid number by reading a string an testing it is numeric before converting it to an it--this loops until a valid number is provided.</P> <P>{@code java UserInputNumInRangeWRegex}</P> **/ public class UserInputNumInRangeWRegex { public static final void main(String[] ignored) { int num = -1; boolean isNum = false; int iRangeMax = 2055; //"": Dummy string, to reuse matcher Matcher mtchrNumNegThrPos = Pattern.compile("(-?\\b(?:20(?:5[0-5]|[0-4][0-9])|1[0-9]{3}|[1-9][0-9]{0,2}|(?<!-)0+))\\b").matcher(""); do { System.out.print("Enter a number between -" + iRangeMax + " and " + iRangeMax + ": "); String strInput = (new Scanner(System.in)).next(); if(!NumberUtils.isNumber(strInput)) { System.out.println("Not a number. Try again."); } else if(!mtchrNumNegThrPos.reset(strInput).matches()) { System.out.println("Not in range. Try again."); } else { //Safe to convert num = Integer.parseInt(strInput); isNum = true; } } while(!isNum); System.out.println("Number: " + num); } 

}

उत्पादन

 [C:\java_code\]java UserInputNumInRangeWRegex Enter a number between -2055 and 2055: tuhet Not a number. Try again. Enter a number between -2055 and 2055: 283837483 Not in range. Try again. Enter a number between -2055 and 2055: -200000 Not in range. Try again. Enter a number between -2055 and 2055: -300 Number: -300 

इस स्टैक ओवरफ्लो प्रश्न का मूल उत्तर

यह एक गंभीर जवाब है जो आपके विशिष्टताओं को फिट करता है। यह @ प्लास्मापावर के उत्तर के समान है।

 (-?\b(?:20(?:5[0-5]|[0-4][0-9])|1[0-9]{3}|[1-9][0-9]{0,2}|(?<!-)0+))\b 

नियमित अभिव्यक्ति दृश्य

डीबगजेक्स डेमो

कभी इसका उपयोग न करें, लेकिन यह काम करता है 🙂

 \b(-2055|-2054|-2053|-2052|-2051|-2050|-2049|-2048|-2047|-2046|-2045|-2044|-2043|-2042|-2041|-2040|-2039|-2038|-2037|-2036|-2035|-2034|-2033|-2032|-2031|-2030|-2029|-2028|-2027|-2026|-2025|-2024|-2023|-2022|-2021|-2020|-2019|-2018|-2017|-2016|-2015|-2014|-2013|-2012|-2011|-2010|-2009|-2008|-2007|-2006|-2005|-2004|-2003|-2002|-2001|-2000|-1999|-1998|-1997|-1996|-1995|-1994|-1993|-1992|-1991|-1990|-1989|-1988|-1987|-1986|-1985|-1984|-1983|-1982|-1981|-1980|-1979|-1978|-1977|-1976|-1975|-1974|-1973|-1972|-1971|-1970|-1969|-1968|-1967|-1966|-1965|-1964|-1963|-1962|-1961|-1960|-1959|-1958|-1957|-1956|-1955|-1954|-1953|-1952|-1951|-1950|-1949|-1948|-1947|-1946|-1945|-1944|-1943|-1942|-1941|-1940|-1939|-1938|-1937|-1936|-1935|-1934|-1933|-1932|-1931|-1930|-1929|-1928|-1927|-1926|-1925|-1924|-1923|-1922|-1921|-1920|-1919|-1918|-1917|-1916|-1915|-1914|-1913|-1912|-1911|-1910|-1909|-1908|-1907|-1906|-1905|-1904|-1903|-1902|-1901|-1900|-1899|-1898|-1897|-1896|-1895|-1894|-1893|-1892|-1891|-1890|-1889|-1888|-1887|-1886|-1885|-1884|-1883|-1882|-1881|-1880|-1879|-1878|-1877|-1876|-1875|-1874|-1873|-1872|-1871|-1870|-1869|-1868|-1867|-1866|-1865|-1864|-1863|-1862|-1861|-1860|-1859|-1858|-1857|-1856|-1855|-1854|-1853|-1852|-1851|-1850|-1849|-1848|-1847|-1846|-1845|-1844|-1843|-1842|-1841|-1840|-1839|-1838|-1837|-1836|-1835|-1834|-1833|-1832|-1831|-1830|-1829|-1828|-1827|-1826|-1825|-1824|-1823|-1822|-1821|-1820|-1819|-1818|-1817|-1816|-1815|-1814|-1813|-1812|-1811|-1810|-1809|-1808|-1807|-1806|-1805|-1804|-1803|-1802|-1801|-1800|-1799|-1798|-1797|-1796|-1795|-1794|-1793|-1792|-1791|-1790|-1789|-1788|-1787|-1786|-1785|-1784|-1783|-1782|-1781|-1780|-1779|-1778|-1777|-1776|-1775|-1774|-1773|-1772|-1771|-1770|-1769|-1768|-1767|-1766|-1765|-1764|-1763|-1762|-1761|-1760|-1759|-1758|-1757|-1756|-1755|-1754|-1753|-1752|-1751|-1750|-1749|-1748|-1747|-1746|-1745|-1744|-1743|-1742|-1741|-1740|-1739|-1738|-1737|-1736|-1735|-1734|-1733|-1732|-1731|-1730|-1729|-1728|-1727|-1726|-1725|-1724|-1723|-1722|-1721|-1720|-1719|-1718|-1717|-1716|-1715|-1714|-1713|-1712|-1711|-1710|-1709|-1708|-1707|-1706|-1705|-1704|-1703|-1702|-1701|-1700|-1699|-1698|-1697|-1696|-1695|-1694|-1693|-1692|-1691|-1690|-1689|-1688|-1687|-1686|-1685|-1684|-1683|-1682|-1681|-1680|-1679|-1678|-1677|-1676|-1675|-1674|-1673|-1672|-1671|-1670|-1669|-1668|-1667|-1666|-1665|-1664|-1663|-1662|-1661|-1660|-1659|-1658|-1657|-1656|-1655|-1654|-1653|-1652|-1651|-1650|-1649|-1648|-1647|-1646|-1645|-1644|-1643|-1642|-1641|-1640|-1639|-1638|-1637|-1636|-1635|-1634|-1633|-1632|-1631|-1630|-1629|-1628|-1627|-1626|-1625|-1624|-1623|-1622|-1621|-1620|-1619|-1618|-1617|-1616|-1615|-1614|-1613|-1612|-1611|-1610|-1609|-1608|-1607|-1606|-1605|-1604|-1603|-1602|-1601|-1600|-1599|-1598|-1597|-1596|-1595|-1594|-1593|-1592|-1591|-1590|-1589|-1588|-1587|-1586|-1585|-1584|-1583|-1582|-1581|-1580|-1579|-1578|-1577|-1576|-1575|-1574|-1573|-1572|-1571|-1570|-1569|-1568|-1567|-1566|-1565|-1564|-1563|-1562|-1561|-1560|-1559|-1558|-1557|-1556|-1555|-1554|-1553|-1552|-1551|-1550|-1549|-1548|-1547|-1546|-1545|-1544|-1543|-1542|-1541|-1540|-1539|-1538|-1537|-1536|-1535|-1534|-1533|-1532|-1531|-1530|-1529|-1528|-1527|-1526|-1525|-1524|-1523|-1522|-1521|-1520|-1519|-1518|-1517|-1516|-1515|-1514|-1513|-1512|-1511|-1510|-1509|-1508|-1507|-1506|-1505|-1504|-1503|-1502|-1501|-1500|-1499|-1498|-1497|-1496|-1495|-1494|-1493|-1492|-1491|-1490|-1489|-1488|-1487|-1486|-1485|-1484|-1483|-1482|-1481|-1480|-1479|-1478|-1477|-1476|-1475|-1474|-1473|-1472|-1471|-1470|-1469|-1468|-1467|-1466|-1465|-1464|-1463|-1462|-1461|-1460|-1459|-1458|-1457|-1456|-1455|-1454|-1453|-1452|-1451|-1450|-1449|-1448|-1447|-1446|-1445|-1444|-1443|-1442|-1441|-1440|-1439|-1438|-1437|-1436|-1435|-1434|-1433|-1432|-1431|-1430|-1429|-1428|-1427|-1426|-1425|-1424|-1423|-1422|-1421|-1420|-1419|-1418|-1417|-1416|-1415|-1414|-1413|-1412|-1411|-1410|-1409|-1408|-1407|-1406|-1405|-1404|-1403|-1402|-1401|-1400|-1399|-1398|-1397|-1396|-1395|-1394|-1393|-1392|-1391|-1390|-1389|-1388|-1387|-1386|-1385|-1384|-1383|-1382|-1381|-1380|-1379|-1378|-1377|-1376|-1375|-1374|-1373|-1372|-1371|-1370|-1369|-1368|-1367|-1366|-1365|-1364|-1363|-1362|-1361|-1360|-1359|-1358|-1357|-1356|-1355|-1354|-1353|-1352|-1351|-1350|-1349|-1348|-1347|-1346|-1345|-1344|-1343|-1342|-1341|-1340|-1339|-1338|-1337|-1336|-1335|-1334|-1333|-1332|-1331|-1330|-1329|-1328|-1327|-1326|-1325|-1324|-1323|-1322|-1321|-1320|-1319|-1318|-1317|-1316|-1315|-1314|-1313|-1312|-1311|-1310|-1309|-1308|-1307|-1306|-1305|-1304|-1303|-1302|-1301|-1300|-1299|-1298|-1297|-1296|-1295|-1294|-1293|-1292|-1291|-1290|-1289|-1288|-1287|-1286|-1285|-1284|-1283|-1282|-1281|-1280|-1279|-1278|-1277|-1276|-1275|-1274|-1273|-1272|-1271|-1270|-1269|-1268|-1267|-1266|-1265|-1264|-1263|-1262|-1261|-1260|-1259|-1258|-1257|-1256|-1255|-1254|-1253|-1252|-1251|-1250|-1249|-1248|-1247|-1246|-1245|-1244|-1243|-1242|-1241|-1240|-1239|-1238|-1237|-1236|-1235|-1234|-1233|-1232|-1231|-1230|-1229|-1228|-1227|-1226|-1225|-1224|-1223|-1222|-1221|-1220|-1219|-1218|-1217|-1216|-1215|-1214|-1213|-1212|-1211|-1210|-1209|-1208|-1207|-1206|-1205|-1204|-1203|-1202|-1201|-1200|-1199|-1198|-1197|-1196|-1195|-1194|-1193|-1192|-1191|-1190|-1189|-1188|-1187|-1186|-1185|-1184|-1183|-1182|-1181|-1180|-1179|-1178|-1177|-1176|-1175|-1174|-1173|-1172|-1171|-1170|-1169|-1168|-1167|-1166|-1165|-1164|-1163|-1162|-1161|-1160|-1159|-1158|-1157|-1156|-1155|-1154|-1153|-1152|-1151|-1150|-1149|-1148|-1147|-1146|-1145|-1144|-1143|-1142|-1141|-1140|-1139|-1138|-1137|-1136|-1135|-1134|-1133|-1132|-1131|-1130|-1129|-1128|-1127|-1126|-1125|-1124|-1123|-1122|-1121|-1120|-1119|-1118|-1117|-1116|-1115|-1114|-1113|-1112|-1111|-1110|-1109|-1108|-1107|-1106|-1105|-1104|-1103|-1102|-1101|-1100|-1099|-1098|-1097|-1096|-1095|-1094|-1093|-1092|-1091|-1090|-1089|-1088|-1087|-1086|-1085|-1084|-1083|-1082|-1081|-1080|-1079|-1078|-1077|-1076|-1075|-1074|-1073|-1072|-1071|-1070|-1069|-1068|-1067|-1066|-1065|-1064|-1063|-1062|-1061|-1060|-1059|-1058|-1057|-1056|-1055|-1054|-1053|-1052|-1051|-1050|-1049|-1048|-1047|-1046|-1045|-1044|-1043|-1042|-1041|-1040|-1039|-1038|-1037|-1036|-1035|-1034|-1033|-1032|-1031|-1030|-1029|-1028|-1027|-1026|-1025|-1024|-1023|-1022|-1021|-1020|-1019|-1018|-1017|-1016|-1015|-1014|-1013|-1012|-1011|-1010|-1009|-1008|-1007|-1006|-1005|-1004|-1003|-1002|-1001|-1000|-999|-998|-997|-996|-995|-994|-993|-992|-991|-990|-989|-988|-987|-986|-985|-984|-983|-982|-981|-980|-979|-978|-977|-976|-975|-974|-973|-972|-971|-970|-969|-968|-967|-966|-965|-964|-963|-962|-961|-960|-959|-958|-957|-956|-955|-954|-953|-952|-951|-950|-949|-948|-947|-946|-945|-944|-943|-942|-941|-940|-939|-938|-937|-936|-935|-934|-933|-932|-931|-930|-929|-928|-927|-926|-925|-924|-923|-922|-921|-920|-919|-918|-917|-916|-915|-914|-913|-912|-911|-910|-909|-908|-907|-906|-905|-904|-903|-902|-901|-900|-899|-898|-897|-896|-895|-894|-893|-892|-891|-890|-889|-888|-887|-886|-885|-884|-883|-882|-881|-880|-879|-878|-877|-876|-875|-874|-873|-872|-871|-870|-869|-868|-867|-866|-865|-864|-863|-862|-861|-860|-859|-858|-857|-856|-855|-854|-853|-852|-851|-850|-849|-848|-847|-846|-845|-844|-843|-842|-841|-840|-839|-838|-837|-836|-835|-834|-833|-832|-831|-830|-829|-828|-827|-826|-825|-824|-823|-822|-821|-820|-819|-818|-817|-816|-815|-814|-813|-812|-811|-810|-809|-808|-807|-806|-805|-804|-803|-802|-801|-800|-799|-798|-797|-796|-795|-794|-793|-792|-791|-790|-789|-788|-787|-786|-785|-784|-783|-782|-781|-780|-779|-778|-777|-776|-775|-774|-773|-772|-771|-770|-769|-768|-767|-766|-765|-764|-763|-762|-761|-760|-759|-758|-757|-756|-755|-754|-753|-752|-751|-750|-749|-748|-747|-746|-745|-744|-743|-742|-741|-740|-739|-738|-737|-736|-735|-734|-733|-732|-731|-730|-729|-728|-727|-726|-725|-724|-723|-722|-721|-720|-719|-718|-717|-716|-715|-714|-713|-712|-711|-710|-709|-708|-707|-706|-705|-704|-703|-702|-701|-700|-699|-698|-697|-696|-695|-694|-693|-692|-691|-690|-689|-688|-687|-686|-685|-684|-683|-682|-681|-680|-679|-678|-677|-676|-675|-674|-673|-672|-671|-670|-669|-668|-667|-666|-665|-664|-663|-662|-661|-660|-659|-658|-657|-656|-655|-654|-653|-652|-651|-650|-649|-648|-647|-646|-645|-644|-643|-642|-641|-640|-639|-638|-637|-636|-635|-634|-633|-632|-631|-630|-629|-628|-627|-626|-625|-624|-623|-622|-621|-620|-619|-618|-617|-616|-615|-614|-613|-612|-611|-610|-609|-608|-607|-606|-605|-604|-603|-602|-601|-600|-599|-598|-597|-596|-595|-594|-593|-592|-591|-590|-589|-588|-587|-586|-585|-584|-583|-582|-581|-580|-579|-578|-577|-576|-575|-574|-573|-572|-571|-570|-569|-568|-567|-566|-565|-564|-563|-562|-561|-560|-559|-558|-557|-556|-555|-554|-553|-552|-551|-550|-549|-548|-547|-546|-545|-544|-543|-542|-541|-540|-539|-538|-537|-536|-535|-534|-533|-532|-531|-530|-529|-528|-527|-526|-525|-524|-523|-522|-521|-520|-519|-518|-517|-516|-515|-514|-513|-512|-511|-510|-509|-508|-507|-506|-505|-504|-503|-502|-501|-500|-499|-498|-497|-496|-495|-494|-493|-492|-491|-490|-489|-488|-487|-486|-485|-484|-483|-482|-481|-480|-479|-478|-477|-476|-475|-474|-473|-472|-471|-470|-469|-468|-467|-466|-465|-464|-463|-462|-461|-460|-459|-458|-457|-456|-455|-454|-453|-452|-451|-450|-449|-448|-447|-446|-445|-444|-443|-442|-441|-440|-439|-438|-437|-436|-435|-434|-433|-432|-431|-430|-429|-428|-427|-426|-425|-424|-423|-422|-421|-420|-419|-418|-417|-416|-415|-414|-413|-412|-411|-410|-409|-408|-407|-406|-405|-404|-403|-402|-401|-400|-399|-398|-397|-396|-395|-394|-393|-392|-391|-390|-389|-388|-387|-386|-385|-384|-383|-382|-381|-380|-379|-378|-377|-376|-375|-374|-373|-372|-371|-370|-369|-368|-367|-366|-365|-364|-363|-362|-361|-360|-359|-358|-357|-356|-355|-354|-353|-352|-351|-350|-349|-348|-347|-346|-345|-344|-343|-342|-341|-340|-339|-338|-337|-336|-335|-334|-333|-332|-331|-330|-329|-328|-327|-326|-325|-324|-323|-322|-321|-320|-319|-318|-317|-316|-315|-314|-313|-312|-311|-310|-309|-308|-307|-306|-305|-304|-303|-302|-301|-300|-299|-298|-297|-296|-295|-294|-293|-292|-291|-290|-289|-288|-287|-286|-285|-284|-283|-282|-281|-280|-279|-278|-277|-276|-275|-274|-273|-272|-271|-270|-269|-268|-267|-266|-265|-264|-263|-262|-261|-260|-259|-258|-257|-256|-255|-254|-253|-252|-251|-250|-249|-248|-247|-246|-245|-244|-243|-242|-241|-240|-239|-238|-237|-236|-235|-234|-233|-232|-231|-230|-229|-228|-227|-226|-225|-224|-223|-222|-221|-220|-219|-218|-217|-216|-215|-214|-213|-212|-211|-210|-209|-208|-207|-206|-205|-204|-203|-202|-201|-200|-199|-198|-197|-196|-195|-194|-193|-192|-191|-190|-189|-188|-187|-186|-185|-184|-183|-182|-181|-180|-179|-178|-177|-176|-175|-174|-173|-172|-171|-170|-169|-168|-167|-166|-165|-164|-163|-162|-161|-160|-159|-158|-157|-156|-155|-154|-153|-152|-151|-150|-149|-148|-147|-146|-145|-144|-143|-142|-141|-140|-139|-138|-137|-136|-135|-134|-133|-132|-131|-130|-129|-128|-127|-126|-125|-124|-123|-122|-121|-120|-119|-118|-117|-116|-115|-114|-113|-112|-111|-110|-109|-108|-107|-106|-105|-104|-103|-102|-101|-100|-99|-98|-97|-96|-95|-94|-93|-92|-91|-90|-89|-88|-87|-86|-85|-84|-83|-82|-81|-80|-79|-78|-77|-76|-75|-74|-73|-72|-71|-70|-69|-68|-67|-66|-65|-64|-63|-62|-61|-60|-59|-58|-57|-56|-55|-54|-53|-52|-51|-50|-49|-48|-47|-46|-45|-44|-43|-42|-41|-40|-39|-38|-37|-36|-35|-34|-33|-32|-31|-30|-29|-28|-27|-26|-25|-24|-23|-22|-21|-20|-19|-18|-17|-16|-15|-14|-13|-12|-11|-10|-9|-8|-7|-6|-5|-4|-3|-2|-1|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223|224|225|226|227|228|229|230|231|232|233|234|235|236|237|238|239|240|241|242|243|244|245|246|247|248|249|250|251|252|253|254|255|256|257|258|259|260|261|262|263|264|265|266|267|268|269|270|271|272|273|274|275|276|277|278|279|280|281|282|283|284|285|286|287|288|289|290|291|292|293|294|295|296|297|298|299|300|301|302|303|304|305|306|307|308|309|310|311|312|313|314|315|316|317|318|319|320|321|322|323|324|325|326|327|328|329|330|331|332|333|334|335|336|337|338|339|340|341|342|343|344|345|346|347|348|349|350|351|352|353|354|355|356|357|358|359|360|361|362|363|364|365|366|367|368|369|370|371|372|373|374|375|376|377|378|379|380|381|382|383|384|385|386|387|388|389|390|391|392|393|394|395|396|397|398|399|400|401|402|403|404|405|406|407|408|409|410|411|412|413|414|415|416|417|418|419|420|421|422|423|424|425|426|427|428|429|430|431|432|433|434|435|436|437|438|439|440|441|442|443|444|445|446|447|448|449|450|451|452|453|454|455|456|457|458|459|460|461|462|463|464|465|466|467|468|469|470|471|472|473|474|475|476|477|478|479|480|481|482|483|484|485|486|487|488|489|490|491|492|493|494|495|496|497|498|499|500|501|502|503|504|505|506|507|508|509|510|511|512|513|514|515|516|517|518|519|520|521|522|523|524|525|526|527|528|529|530|531|532|533|534|535|536|537|538|539|540|541|542|543|544|545|546|547|548|549|550|551|552|553|554|555|556|557|558|559|560|561|562|563|564|565|566|567|568|569|570|571|572|573|574|575|576|577|578|579|580|581|582|583|584|585|586|587|588|589|590|591|592|593|594|595|596|597|598|599|600|601|602|603|604|605|606|607|608|609|610|611|612|613|614|615|616|617|618|619|620|621|622|623|624|625|626|627|628|629|630|631|632|633|634|635|636|637|638|639|640|641|642|643|644|645|646|647|648|649|650|651|652|653|654|655|656|657|658|659|660|661|662|663|664|665|666|667|668|669|670|671|672|673|674|675|676|677|678|679|680|681|682|683|684|685|686|687|688|689|690|691|692|693|694|695|696|697|698|699|700|701|702|703|704|705|706|707|708|709|710|711|712|713|714|715|716|717|718|719|720|721|722|723|724|725|726|727|728|729|730|731|732|733|734|735|736|737|738|739|740|741|742|743|744|745|746|747|748|749|750|751|752|753|754|755|756|757|758|759|760|761|762|763|764|765|766|767|768|769|770|771|772|773|774|775|776|777|778|779|780|781|782|783|784|785|786|787|788|789|790|791|792|793|794|795|796|797|798|799|800|801|802|803|804|805|806|807|808|809|810|811|812|813|814|815|816|817|818|819|820|821|822|823|824|825|826|827|828|829|830|831|832|833|834|835|836|837|838|839|840|841|842|843|844|845|846|847|848|849|850|851|852|853|854|855|856|857|858|859|860|861|862|863|864|865|866|867|868|869|870|871|872|873|874|875|876|877|878|879|880|881|882|883|884|885|886|887|888|889|890|891|892|893|894|895|896|897|898|899|900|901|902|903|904|905|906|907|908|909|910|911|912|913|914|915|916|917|918|919|920|921|922|923|924|925|926|927|928|929|930|931|932|933|934|935|936|937|938|939|940|941|942|943|944|945|946|947|948|949|950|951|952|953|954|955|956|957|958|959|960|961|962|963|964|965|966|967|968|969|970|971|972|973|974|975|976|977|978|979|980|981|982|983|984|985|986|987|988|989|990|991|992|993|994|995|996|997|998|999|1000|1001|1002|1003|1004|1005|1006|1007|1008|1009|1010|1011|1012|1013|1014|1015|1016|1017|1018|1019|1020|1021|1022|1023|1024|1025|1026|1027|1028|1029|1030|1031|1032|1033|1034|1035|1036|1037|1038|1039|1040|1041|1042|1043|1044|1045|1046|1047|1048|1049|1050|1051|1052|1053|1054|1055|1056|1057|1058|1059|1060|1061|1062|1063|1064|1065|1066|1067|1068|1069|1070|1071|1072|1073|1074|1075|1076|1077|1078|1079|1080|1081|1082|1083|1084|1085|1086|1087|1088|1089|1090|1091|1092|1093|1094|1095|1096|1097|1098|1099|1100|1101|1102|1103|1104|1105|1106|1107|1108|1109|1110|1111|1112|1113|1114|1115|1116|1117|1118|1119|1120|1121|1122|1123|1124|1125|1126|1127|1128|1129|1130|1131|1132|1133|1134|1135|1136|1137|1138|1139|1140|1141|1142|1143|1144|1145|1146|1147|1148|1149|1150|1151|1152|1153|1154|1155|1156|1157|1158|1159|1160|1161|1162|1163|1164|1165|1166|1167|1168|1169|1170|1171|1172|1173|1174|1175|1176|1177|1178|1179|1180|1181|1182|1183|1184|1185|1186|1187|1188|1189|1190|1191|1192|1193|1194|1195|1196|1197|1198|1199|1200|1201|1202|1203|1204|1205|1206|1207|1208|1209|1210|1211|1212|1213|1214|1215|1216|1217|1218|1219|1220|1221|1222|1223|1224|1225|1226|1227|1228|1229|1230|1231|1232|1233|1234|1235|1236|1237|1238|1239|1240|1241|1242|1243|1244|1245|1246|1247|1248|1249|1250|1251|1252|1253|1254|1255|1256|1257|1258|1259|1260|1261|1262|1263|1264|1265|1266|1267|1268|1269|1270|1271|1272|1273|1274|1275|1276|1277|1278|1279|1280|1281|1282|1283|1284|1285|1286|1287|1288|1289|1290|1291|1292|1293|1294|1295|1296|1297|1298|1299|1300|1301|1302|1303|1304|1305|1306|1307|1308|1309|1310|1311|1312|1313|1314|1315|1316|1317|1318|1319|1320|1321|1322|1323|1324|1325|1326|1327|1328|1329|1330|1331|1332|1333|1334|1335|1336|1337|1338|1339|1340|1341|1342|1343|1344|1345|1346|1347|1348|1349|1350|1351|1352|1353|1354|1355|1356|1357|1358|1359|1360|1361|1362|1363|1364|1365|1366|1367|1368|1369|1370|1371|1372|1373|1374|1375|1376|1377|1378|1379|1380|1381|1382|1383|1384|1385|1386|1387|1388|1389|1390|1391|1392|1393|1394|1395|1396|1397|1398|1399|1400|1401|1402|1403|1404|1405|1406|1407|1408|1409|1410|1411|1412|1413|1414|1415|1416|1417|1418|1419|1420|1421|1422|1423|1424|1425|1426|1427|1428|1429|1430|1431|1432|1433|1434|1435|1436|1437|1438|1439|1440|1441|1442|1443|1444|1445|1446|1447|1448|1449|1450|1451|1452|1453|1454|1455|1456|1457|1458|1459|1460|1461|1462|1463|1464|1465|1466|1467|1468|1469|1470|1471|1472|1473|1474|1475|1476|1477|1478|1479|1480|1481|1482|1483|1484|1485|1486|1487|1488|1489|1490|1491|1492|1493|1494|1495|1496|1497|1498|1499|1500|1501|1502|1503|1504|1505|1506|1507|1508|1509|1510|1511|1512|1513|1514|1515|1516|1517|1518|1519|1520|1521|1522|1523|1524|1525|1526|1527|1528|1529|1530|1531|1532|1533|1534|1535|1536|1537|1538|1539|1540|1541|1542|1543|1544|1545|1546|1547|1548|1549|1550|1551|1552|1553|1554|1555|1556|1557|1558|1559|1560|1561|1562|1563|1564|1565|1566|1567|1568|1569|1570|1571|1572|1573|1574|1575|1576|1577|1578|1579|1580|1581|1582|1583|1584|1585|1586|1587|1588|1589|1590|1591|1592|1593|1594|1595|1596|1597|1598|1599|1600|1601|1602|1603|1604|1605|1606|1607|1608|1609|1610|1611|1612|1613|1614|1615|1616|1617|1618|1619|1620|1621|1622|1623|1624|1625|1626|1627|1628|1629|1630|1631|1632|1633|1634|1635|1636|1637|1638|1639|1640|1641|1642|1643|1644|1645|1646|1647|1648|1649|1650|1651|1652|1653|1654|1655|1656|1657|1658|1659|1660|1661|1662|1663|1664|1665|1666|1667|1668|1669|1670|1671|1672|1673|1674|1675|1676|1677|1678|1679|1680|1681|1682|1683|1684|1685|1686|1687|1688|1689|1690|1691|1692|1693|1694|1695|1696|1697|1698|1699|1700|1701|1702|1703|1704|1705|1706|1707|1708|1709|1710|1711|1712|1713|1714|1715|1716|1717|1718|1719|1720|1721|1722|1723|1724|1725|1726|1727|1728|1729|1730|1731|1732|1733|1734|1735|1736|1737|1738|1739|1740|1741|1742|1743|1744|1745|1746|1747|1748|1749|1750|1751|1752|1753|1754|1755|1756|1757|1758|1759|1760|1761|1762|1763|1764|1765|1766|1767|1768|1769|1770|1771|1772|1773|1774|1775|1776|1777|1778|1779|1780|1781|1782|1783|1784|1785|1786|1787|1788|1789|1790|1791|1792|1793|1794|1795|1796|1797|1798|1799|1800|1801|1802|1803|1804|1805|1806|1807|1808|1809|1810|1811|1812|1813|1814|1815|1816|1817|1818|1819|1820|1821|1822|1823|1824|1825|1826|1827|1828|1829|1830|1831|1832|1833|1834|1835|1836|1837|1838|1839|1840|1841|1842|1843|1844|1845|1846|1847|1848|1849|1850|1851|1852|1853|1854|1855|1856|1857|1858|1859|1860|1861|1862|1863|1864|1865|1866|1867|1868|1869|1870|1871|1872|1873|1874|1875|1876|1877|1878|1879|1880|1881|1882|1883|1884|1885|1886|1887|1888|1889|1890|1891|1892|1893|1894|1895|1896|1897|1898|1899|1900|1901|1902|1903|1904|1905|1906|1907|1908|1909|1910|1911|1912|1913|1914|1915|1916|1917|1918|1919|1920|1921|1922|1923|1924|1925|1926|1927|1928|1929|1930|1931|1932|1933|1934|1935|1936|1937|1938|1939|1940|1941|1942|1943|1944|1945|1946|1947|1948|1949|1950|1951|1952|1953|1954|1955|1956|1957|1958|1959|1960|1961|1962|1963|1964|1965|1966|1967|1968|1969|1970|1971|1972|1973|1974|1975|1976|1977|1978|1979|1980|1981|1982|1983|1984|1985|1986|1987|1988|1989|1990|1991|1992|1993|1994|1995|1996|1997|1998|1999|2000|2001|2002|2003|2004|2005|2006|2007|2008|2009|2010|2011|2012|2013|2014|2015|2016|2017|2018|2019|2020|2021|2022|2023|2024|2025|2026|2027|2028|2029|2030|2031|2032|2033|2034|2035|2036|2037|2038|2039|2040|2041|2042|2043|2044|2045|2046|2047|2048|2049|2050|2051|2052|2053|2054|2055)\b 

इतने सारे उत्तर, लेकिन टिप्पणियों में ओपी पक्ष के प्रश्न के बारे में कोई भी (या परवाह नहीं) पढ़ता है?

मैं ओसीएएमएल में एक दुभाषिया लिख ​​रहा हूँ …. मैं कैसे regex का उपयोग किए बिना सीमा के भीतर इनपुट नंबर को मान्य कर सकता हूँ ?? – Trung Nguyen 2 मार्च 17:30 पर

इतने सारे उत्तर के रूप में – सही ढंग से – इस परिदृश्य के लिए regex का उपयोग भयानक है, यह बताता है कि ओकैम में अन्य तरीकों के बारे में सोचें! यह कुछ समय है जब से मैं ओकैमल का इस्तेमाल करता हूं, लेकिन कुछ निर्माणों को देखकर मैं इसे एक साथ दस्तक दे सकता था:

 let isInRange i = not(i < -2055 or i > 2055);; let isIntAndInRange s = try let i = int_of_string s in not(i < -2055 or i > 2055) with Failure "int_of_string" -> false;; let () = print_string "type a number: " in let s = read_line () in isIntAndInRange s 

अगर इसके बारे में कुछ भी स्पष्ट नहीं है, तो कृपया इसकी वाक्यविन्यास, प्रकार रूपांतरण कार्यों और अपवाद हैंडलिंग और इनपुट आउटपुट फ़ंक्शन पर पढ़ें।

उपयोगकर्ता इनपुट भाग केवल प्रदर्शित करने के लिए उपयोग किया जाता है वहां read_int फ़ंक्शन का उपयोग करना अधिक सुविधाजनक हो सकता है। लेकिन अपवाद को संभालने की बुनियादी अवधारणा एक ही रहता है।

समस्या का विश्लेषण करें

अगर आप "आवश्यक" एक regex का उपयोग करते हैं, तो स्वीकृत क्रमपरिवर्तनों का विश्लेषण करके समस्या को तोड़ दें

"-2055 से लेकर 2055 तक की एक सीमा" के रूप में व्यक्त किया जा सकता है:

  • एक वैकल्पिक –
  • वैकल्पिक अग्रणी शून्य
  • 0 से 2055 तक एक नंबर के बाद

"0 से 2055 की संख्या" विशिष्ट क्रमपरिवर्तनों की एक सीमित संख्या में से एक हो सकती है:

  • एक अंक (0- 9)
  • दो अंक (10- 99)
  • तीन अंक (100- 99 9)
  • 1 से प्रारंभ होने वाले चार अंक (1000-1999)
  • 20 अंकों से शुरू होने वाला चार अंक (2000-204 * 9)
  • 205 से शुरु होने वाले चार अंक (2050-2055 *)

ध्यान दें कि इस regex के उद्देश्य के लिए, "0-9" और "1-9" के बीच अंतर करने के लिए आवश्यक नहीं है, और केवल अंतिम दो श्रेणियों में स्वीकार किए गए अंकों / वर्णों की सीमा पर कोई प्रतिबंध है (एक तारा)।

घटक regex अभिव्यक्ति लिखें

प्रत्येक उपरोक्त घटक भागों को व्यक्तिगत रूप से एक नियमित अभिव्यक्ति के रूप में व्यक्त करना आसान है:

  • -?
  • 0 *
    • [0-9]
    • [0-9] [0-9]
    • [0-9] [0-9] [0-9]
    • 1 [0-9] [0-9] [0-9]
    • 20 [0-4] [0-9]
    • 205 [0-5]

भाव एक साथ रखो

पूरे मैच के लिए प्रासंगिक अभिव्यक्ति होगी:

 -?0*([0-9]|[0-9][0-9]|[0-9][0-9][0-9]|1[0-9][0-9][0-9]|20[0-4][0-9]|205[0-5]) 

या थोड़ा अधिक संक्षेप में:

 -?0*([0-9]{1,3}|1[0-9]{3}|20[0-4][0-9]|205[0-5]) 

इनपुट मानते हुए केवल "संख्या" और कुछ और ही नहीं, अंतिम regex इसलिए है:

 ^-?0*([0-9]{1,3}|1[0-9]{3}|20[0-4][0-9]|205[0-5])$ 

यदि एक प्रमुख प्लस चिह्न की अनुमति देने के लिए आवश्यक है, तो यह हो जाता है:

 ^[-+]?0*([0-9]{1,3}|1[0-9]{3}|20[0-4][0-9]|205[0-5])$ 

यह एक जे एस बेला है जो दिखाता है कि कौन सी गुजरता है और अंतिम रेगेक्स क्या विफल हो जाएगा।

एल्टरमाइंड द्वारा दी गई महान अभिव्यक्ति के लिए एक वैकल्पिक दृष्टिकोण के रूप में, यहां एक यह है कि यह देखने के लिए कि एक और दृष्टिकोण कैसा लग सकता है (और क्या नहीं करना) दिलचस्प है।

यह एक रोचक अभ्यास है, क्योंकि आप दो विशिष्ट तरीकों का विचार कर सकते हैं: मोटे तौर पर, आप या तो:

  1. 4-वर्ण संख्या, फिर 3-वर्ण संख्या आदि से मिलान करके आगे बढ़ें।
  2. या हजारों अंकों से मिलान करके आगे बढ़ें, फिर सैकड़ों अंक, आदि।

कोशिश करने के बिना, आपको कैसे पता चलेगा कि कौन सा सबसे अच्छा है? यह पता चला है कि पहला दृष्टिकोण (aliteralmind का उत्तर) अधिक किफायती है

कम, मैं पीएचपी भाषा में परीक्षणों की एक श्रृंखला शामिल करता हूं यदि आप या कोई अन्य आउटपुट जांचना चाहते हैं।

नीचे, मैं आपको "फ्री-स्पेसिंग मोड" में regex दूँगा, जो कि रिजेक्स के अंदर की टिप्पणियों को अनुमति देता है ताकि आप आसानी से समझ सकें कि यह क्या करता है। हालांकि, सभी रेगेक्स इंजिन फ्री-स्पेसिंग मोड का समर्थन नहीं करते, इससे पहले कि हम दिलचस्प भाग से शुरू करें, यहां एक लाइनर के रूप में रीगेक्स है।

ध्यान दें कि आपका प्रश्न -2055 से 2055 तक नंबरों का उल्लेख करता है। मैंने मान लिया है कि आप "सामान्य संख्या" से मिलान करना चाहते हैं, बिना अग्रणी शून्य के। इसका मतलब है कि regex 999 से मेल खाता होगा, लेकिन 09 99 नहीं। यदि आप अग्रणी शून्य चाहते हैं, तो मुझे बताएं, यह एक बहुत ही आसान बदलाव है।

इसके अलावा, यदि आप utf-8 मोड में मिलान कर रहे हैं, तो \d को [0-9] द्वारा प्रतिस्थापित किया जाना चाहिए यह अधिक सामान्य रूप है

एक-लाइनर के रूप में रेगेक्स

 ^(?!-0$)-?(?:(?=\d{4}$)[12])?(?:(?=\d{3}$)(?:(?:(?<=^)|(?<=^-)|(?<=1)|(?<=-1))\d|(?:(?<=2)|(?<=-2))0))?(?:(?=\d{2}$)(?:(?:(?<=^)|(?<=^-)|(?<=^\d)|(?<=^-\d)|(?<=^\d{2})(?<!20)|(?<=^-\d{2})(?<!-20))\d|(?:(?<=20)|(?<=-20))[0-5]))?(?:(?=\d$)(?:(?:(?<=^)|(?<=^-)|(?<=^\d)|(?<=^-\d)|(?<=^\d{2})|(?<=^-\d{2})|(?<=^\d{3})(?<!205)|(?<=^-\d{3})(?<!-205))\d|(?:(?<=205)|(?<=-205))[0-5]))$ 

फ्री-स्पेसिंग मोड में रेगेक्स

 (?x) # free-spacing mode ^ # anchor at beginning of string. (?!-0$)-? # optional minus sign, but not for -0 (?: # OPTIONAL THOUSANDS DIGIT (?=\d{4}$)[12] # assert that the number is 4-digit long, match 1 or 2 )? # end optional thousands digit (?: # OPTIONAL HUNDREDS DIGIT (?=\d{3}$) # assert that there are three digits left (?: # non-capturing group (?:(?<=^)|(?<=^-)|(?<=1)|(?<=-1))\d # if preceding chars are 1, -1 or head of string: value can be any digit | # or (?:(?<=2)|(?<=-2))0 # if preceding chars are 2 or -2: value must be 0 ) # close non-capturing group )? # end optional hundreds digits (?: # OPTIONAL TENS DIGIT (?=\d{2}$) # assert that there are two digits left (?: # start non-capturing group # if preceding char is head of string, single digit, # or two digits that are not 20 # (with or without a minus) # value can be any digit (?:(?<=^)|(?<=^-)|(?<=^\d)|(?<=^-\d)| (?<=^\d{2})(?<!20)|(?<=^-\d{2})(?<!-20))\d | # or (?:(?<=20)|(?<=-20))[0-5] # if preceding chars are 20 or -20: value can be from 0 to 5 ) # end non-capturing group )? # close optional tens digits (?: # FINAL DIGIT (non optional) (?=\d$) # assert that there is only one digit left (?: # start non-capturing group # if preceding char is head of string, single digit, # two digits, or three digits that are not 205 # (with or without a minus) # value can be any digit (?:(?<=^)|(?<=^-)|(?<=^\d)|(?<=^-\d)| (?<=^\d{2})|(?<=^-\d{2})| (?<=^\d{3})(?<!205)|(?<=^-\d{3})(?<!-205)) \d | # or (?:(?<=205)|(?<=-205))[0-5] # if preceding chars are 205 or -205: value can be from 0 to 5 ) # end non-capturing group ) # end final digit $ 

टेस्ट की श्रृंखला

ये परीक्षण -100000 से 100000 तक के नंबरों के साथ मिलान करने का प्रयास करते हैं। वे निम्नलिखित आउटपुट का उत्पादन करते हैं:

 Successful test: matches from -2055 to 2055 Successful test: NO matches from -100000 to -2056 Successful test: NO matches from 2056 to 100000 

यहां कोड है:

 <?php $regex="~^(?!-0$)-?(?:(?=\d{4}$)[12])?(?:(?=\d{3}$)(?:(?:(?<=^)|(?<=^-)|(?<=1)|(?<=-1))\d|(?:(?<=2)|(?<=-2))0))?(?:(?=\d{2}$)(?:(?:(?<=20)|(?<=-20))[0-5]|(?:(?<=^)|(?<=^-)|(?<=^\d)|(?<=^-\d)|(?<=^\d{2})(?<!20)|(?<=^-\d{2})(?<!-20))\d))?(?:(?=\d$)(?:(?:(?<=205)|(?<=-205))[0-5]|(?:(?<=^)|(?<=^-)|(?<=^\d)|(?<=^-\d)|(?<=^\d{2})|(?<=^-\d{2})|(?<=^\d{3})(?<!205)|(?<=^-\d{3})(?<!-205))\d))$~"; // Test 1 $success="Successful test: matches from -2055 to 2055"; for($i=-2055;$i<=2055;$i++) { $chari = sprintf("%d",$i); if (! preg_match($regex,$chari)) { $success="Failed test: matches from -2055 to 2055"; echo $chari.": No Match!<br />"; } } echo $success."<br />"; // Test 2 $success="Successful test: NO matches from -100000 to -2056"; for($i=-100000;$i<=-2056;$i++) { $chari = sprintf("%d",$i); if (preg_match($regex,$chari)) { $success="Failed test: NO matches from -100000 to -2056"; echo $chari.": Match!<br />"; } } echo $success."<br />"; // Test 3 $success="Successful test: NO matches from 2056 to 100000"; for($i=2056;$i<=100000;$i++) { $chari = sprintf("%d",$i); if (preg_match($regex,$chari)) { $success="Failed test: NO matches from 2056 to 100000"; echo $chari.": Match!<br />"; } } echo $success."<br />"; ?> 

स्पीड टेस्ट

यहां मेरे सरल स्पीड टेस्ट का आउटपुट है, जो -1 एम से + 1 एम तक मेल खाता है। जैसे कि कासिमिर ने बताया, अगर aliteralmind की अभिव्यक्ति को लंगर दिया गया था, तो धीमी गति के बजाय यह 25% से तेज हो जाएगा!

 zx81: 3.796217918396 aliteralmind: 3.9922280311584 difference: 5.1632998151294 percent longer 

यहां परीक्षण कोड है:

 $regex="~(?x)^(?!-0$)-?(?:(?=\d{4}$)[12])?(?:(?=\d{3}$)(?:(?:(?<=^)|(?<=^-)|(?<=1)|(?<=-1))\d|(?:(?<=2)|(?<=-2))0))?(?:(?=\d{2}$)(?:(?:(?<=^)|(?<=^-)|(?<=^\d)|(?<=^-\d)|(?<=^\d{2})(?<!20)|(?<=^-\d{2})(?<!-20))\d|(?:(?<=20)|(?<=-20))[0-5]))?(?:(?=\d$)(?:(?:(?<=^)|(?<=^-)|(?<=^\d)|(?<=^-\d)|(?<=^\d{2})|(?<=^-\d{2})|(?<=^\d{3})(?<!205)|(?<=^-\d{3})(?<!-205))\d|(?:(?<=205)|(?<=-205))[0-5]))$~"; $regex2 = "~(-?\b(?:20(?:5[0-5]|[0-4][0-9])|1[0-9]{3}|[1-9][0-9]{0,2}|(?<!-)0+))\b~"; $start=microtime(TRUE); for ($i=-1000000;$i<1000000;$i++) preg_match($regex,$i); $zxend=microtime(TRUE); for ($i=-1000000;$i<1000000;$i++) preg_match($regex2,$i); $alitend=microtime(TRUE); $zx81 = $zxend-$start; $alit = $alitend-$zxend; $diff = 100*($alit-$zx81)/$zx81; echo "zx81: ".$zx81."<br />"; echo "aliteralmind: ".$alit."<br />"; echo "difference: ".$diff." percent longer<br />"; 

किसी संख्या की जांच करने के लिए केवल Regex का उपयोग क्यों करें?

 int n = -2000; if(n >= -2055 && n <= 2055) //Do something else //Do something else 

इसे इस्तेमाल करे:

 \-?\b0*(205[0-5]|20[0-4]\d|1?\d{3}|\d{1,2})\b 

इस महान उपकरण की जांच करें, जो संख्यात्मक श्रेणियों के लिए एक regex उत्पन्न करता है। आप पायथन में स्रोत कोड भी डाउनलोड कर सकते हैं:

http://utilitymill.com/utility/Regex_For_Range http://code.activestate.com/recipes/534137-generate-a-regular- एक्सप्रेशन-टू- मैच- ए- अरबिटरर /

ओपी द्वारा अनुरोधित श्रेणी के लिए यह उत्पन्न करता है: -?([0-9]{1,3}|1[0-9]{3}|20[0-4][0-9]|205[0-5])

एक बहुत सरल regex के साथ प्रयास करें

 ^([-0][0-1][0-9][0-9][0-9])$|^([-0]20[0-4][0-9])$|^([-0]205[0-5])$ 

दृश्य प्रतिनिधित्व

यहां छवि विवरण दर्ज करें

यह समझना बहुत आसान है

  • समूह 1 [-0][0-1][0-9][0-9][0-9] [-1999, 1 999] के मूल्यों को कवर करेगा
  • समूह 2 [-0]20[0-4][0-9] कवर होगा [-2000, -2049] और [2000,2049] मान
  • समूह 3 [-0]205[0-5] [-2050, -2055] और [2050, 2055] मान को कवर किया जाएगा

String.format("%05d", number) बहुत अच्छी तरह से काम किया है यहाँ?

नमूना कोड: (अधिक स्पष्टता के लिए इनलाइन टिप्पणियां पढ़ें।)

 int[] numbers = new int[] { -10002, -3000, -2056, -2055, -2000, -1999, -20, -1, 0, 1, 260, 1999, 2000, 2046, 2055, 2056, 2955, 3000, 10002, 123456 }; //valid range -2055 to 2055 inclusive Pattern p = Pattern.compile("^([-0][0-1][0-9][0-9][0-9])$|^([-0]20[0-4][0-9])$|^([-0]205[0-5])$"); for (int number : numbers) { String string = String.format("%05d", number); Matcher m = p.matcher(string); if (m.find()) { System.out.println(number + " is in range."); } else { System.out.println(number + " is not in range."); } } 

उत्पादन:

 -10002 is not in range. -3000 is not in range. -2056 is not in range. -2055 is in range. -2000 is in range. -1999 is in range. -20 is in range. -1 is in range. 0 is in range. 1 is in range. 260 is in range. 1999 is in range. 2000 is in range. 2046 is in range. 2055 is in range. 2056 is not in range. 2955 is not in range. 3000 is not in range. 10002 is not in range. 123456 is not in range. 

इसे इस्तेमाल करे:

 ^-?0*(1?[0-9]{1,3}|20[0-4][0-9]|205[0-5])$ 

कोष्ठक से पहले regex एक वैकल्पिक से मेल खाता है - और किसी भी अग्रणी 0s

ब्रैकेट्स का पहला भाग ( 1?[0-9]{1,3} ) 0-1999 से मेल खाता है

ब्रैकेट्स का दूसरा भाग ( 20[0-4][0-9] ) 2000-2049 से मेल खाता है

ब्रैकेट में तीसरा भाग ( 205[0-5] ) 2050-2055 से मेल खाता है

अभी तक एक और –

  # ^-?0*(?:20(?:[0-4][0-9]|5[0-5])|[0-9]{1,3})$ ^ -? 0* (?: 20 (?: [0-4] [0-9] | 5 [0-5] ) | [0-9]{1,3} ) $