За последние 24 часа нас посетили 17169 программистов и 1569 роботов. Сейчас ищут 1783 программиста ...

помогите с регулярными выражениями

Тема в разделе "Регулярные выражения", создана пользователем DEADLY, 11 авг 2006.

  1. DEADLY

    DEADLY Активный пользователь

    С нами с:
    3 авг 2006
    Сообщения:
    66
    Симпатии:
    0
    Адрес:
    Магнитогорск
    надо в тексте найти текст содержащий ip адрес
    например:
    жвдапожвапзщываопжд 192.168.14.15 варпывпрапрвапрвапр
     
  2. svk

    svk Активный пользователь

    С нами с:
    7 авг 2006
    Сообщения:
    506
    Симпатии:
    0
    Адрес:
    NetByNet
    чем
    strpos($text, '192.168.14.15', 0);
    не катит?
     
  3. DEADLY

    DEADLY Активный пользователь

    С нами с:
    3 авг 2006
    Сообщения:
    66
    Симпатии:
    0
    Адрес:
    Магнитогорск
    нет
    ip может быть любой
     
  4. X-Cray

    X-Cray Активный пользователь

    С нами с:
    10 июл 2006
    Сообщения:
    255
    Симпатии:
    0
    Адрес:
    Москва
    PHP:
    1. <?
    2. $txt="
    3. sdfdsf sd 43 143.23.242.12 sds dsd sd sd
    4. sd
    5. sds dsd sdsd ds d 3241 454 2113 34
    6. dsfds
    7. f 3
    8. 45
    9. 34
    10. 5
    11. 23.45.2.1
    12. 247.135.2.56
    13. fdgfgf
    14.  
    15. 45
    16. ";
    17.  
    18. preg_match_all('#([0-9]{1,3}\.){3}([0-9]{1,3})#',$txt,$matches);
    19.                for ($i=0; $i<count($matches[0]); $i++)
    20.                echo $matches[0][$i]."<br>";
    21. ?>
     
  5. X-Cray

    X-Cray Активный пользователь

    С нами с:
    10 июл 2006
    Сообщения:
    255
    Симпатии:
    0
    Адрес:
    Москва
    Возможно, регулярку можно упростить на пару условий, я с ними не часто работаю, но это работает.
     
  6. DEADLY

    DEADLY Активный пользователь

    С нами с:
    3 авг 2006
    Сообщения:
    66
    Симпатии:
    0
    Адрес:
    Магнитогорск
    спасибо
    тему мона закрыть
     
  7. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    X-Cray
    твой вариант не оч хорошо работает.
    Он соответствует:
    192.168.1.92
    1.
    92

    У меня есть свой вариант нахождения IP
    /^([0-9]{0,3}(\.[0-9]{0,3}){0,4}){0,1}$/
    Но он тоже не идеален, соответствует:
    192.168.1.92
    .92
     
  8. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Пожалуй вот идеальный вариант:

    /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/
     
  9. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    [0-9]{1,3} байт это от 0 до 255 а не от 0 до 999...
     
  10. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    И?
     
  11. X-Cray

    X-Cray Активный пользователь

    С нами с:
    10 июл 2006
    Сообщения:
    255
    Симпатии:
    0
    Адрес:
    Москва
    PHP:
    1.  
    2.  
    3. <?
    4. $txt="
    5. 192.168.1.92
    6. 1.
    7. 92
    8. ";
    9.  
    10. preg_match_all('#([0-9]{1,3}\.){3}([0-9]{1,3})#',$txt,$matches);
    11.                for ($i=0; $i<count($matches[0]); $i++)
    12.                echo $matches[0][$i]."<br>";
    13. ?>
    Запускай...
     
  12. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Кажется понял.. :)

    Как тебе этот вариант:
    /[0-2][0-5][0-5]\.[0-2][0-5][0-5]\.[0-2][0-5][0-5]\.[0-2][0-5][0-5]/
     
  13. X-Cray

    X-Cray Активный пользователь

    С нами с:
    10 июл 2006
    Сообщения:
    255
    Симпатии:
    0
    Адрес:
    Москва
    Вы как цикл для выборки отета регулярки составляете????
     
  14. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    X-Cray
    мессаги одновременно отправили :)

    А что делает знак
    #
    в начале и конце?
     
  15. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    X-Cray я?

    Так:
    PHP:
    1.  
    2. <?
    3. $a='255.255.255.255';
    4. if (!preg_match('/[0-2][0-5][0-5]\.[0-2][0-5][0-5]\.[0-2][0-5][0-5]\.[0-2][0-5][0-5]/',$a,$rezultat)) {
    5.         echo "Ничего не найдено";
    6.         exit;
    7. }
    8. //$rezultat=$rezultat[0];
    9.  
    10. for ($i=0; $i<count($rezultat); $i++)
    11. echo $rezultat[$i].'<br>';
    12. ?>
    13.  
     
  16. X-Cray

    X-Cray Активный пользователь

    С нами с:
    10 июл 2006
    Сообщения:
    255
    Симпатии:
    0
    Адрес:
    Москва
    # - это "кавычки регулярки"

    Doctor, а для того, чтоб выбирать по-человечески, я привел цикл, а прег_мач у меня ALL
     
  17. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Кури мануал
    зачем?
    Что у меня неправильно в скрипте?
     
  18. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Чем кавычки
    #
    отличаются от
    / /
    ?
     
  19. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Лады, поставим all
     
  20. X-Cray

    X-Cray Активный пользователь

    С нами с:
    10 июл 2006
    Сообщения:
    255
    Симпатии:
    0
    Адрес:
    Москва
    Ничем не отличаются.

    P.S. не знаю, что у вас там не пашет с моим скриптом, наверное, скопировали криво.

    PHP:
    1. <?
    2. $txt="
    3.  
    4.  
    5.  
    6. main page
    7.  
    8.  
    9.  
    10. proxy list [1]
    11.  
    12.  
    13. proxy list [2]
    14.  
    15.  
    16. proxy list [3]
    17.  
    18.  
    19. proxy list [4]
    20.  
    21.  
    22. proxy list [5]
    23.  
    24.  
    25.  
    26. faq
    27.  
    28.  
    29.  
    30. links
    31.  
    32.  
    33.  
    34. contact
    35.  
    36.  
    37.  
    38.  
    39. Top Free Sites ...
    40.  
    41. Proxy 4 Free
    42. Anonymity Checker
    43. Digital Cyber Soft
    44. Stay Invisible
    45. Online Proxy Checker
    46. Public Web Proxies
    47. Xroxy
    48. Proxz.com
    49. Freeproxylists
    50. My-Proxy
    51. MRP Proxylist
    52. Message Board
    53.  
    54.  
    55.  
    56.  
    57.  
    58. Privacy Tools...
    59.  
    60. Protect your privacy!
    61.  
    62. Safe Surfing Suite
    63. combines Anonymous Surfing, Anti-Spyware and Digital Shredder Lite into one solution!
    64.  
    65. read more
    66.  
    67. Secure Tunnel
    68. is a powerful data encryption and tunneling service that protects your online privacy.
    69.  
    70. read more
    71.  
    72. Clear All History
    73. is an award-winning privacy and clean-up utility that eliminates all those tracks from your computer!
    74.  
    75. read more
    76.  
    77. Total Net Shield
    78. is a complete privacy suite that shields all of your web communications.
    79.  
    80. read more
    81.  
    82. Anti-Spyware
    83. finds computer monitoring surveillance software put on your PC without your knowledge or consent.
    84.  
    85. read more
    86.  
    87.  
    88.  
    89.  
    90.  
    91.  
    92.  ProxyWay is a Free proxy server agent (proxy software) which you use together with your web browser to ensure your anonymity when you surf the Internet. ProxyWay shields your current connection when you visit websites, download files, or use web-based e-mail accounts. ProxyWay provides an extended proxy management system that enables you to search for proxies - proxy finder; check proxy servers for speed, anonymity, type - proxy checker; create proxy chains. Allows update proxy list automatically using scheduler. Lets you change proxies (cascades) per time, per connection or randomly. Also it can be used as a simple local proxy server.
    93. Free version of ProxyWay is available to download only from StayInvisible.com
    94.  
    95.  
    96.  
    97. IP Port Type Country Last Test
    98. 201.65.178.130 80 anonymous Brazil 2006-08-13 Whois
    99. 202.159.203.185 80 transparent India 2006-08-13 Whois
    100. 210.222.254.227 8080 high anonymity South Korea 2006-08-13 Whois
    101. 203.109.34.34 80 transparent Malaysia 2006-08-13 Whois
    102. 69.212.128.5 3128 transparent United States 2006-08-13 Whois
    103. 125.243.163.67 8080 transparent  2006-08-13 Whois
    104. 203.113.130.49 80 high anonymity Vietnam 2006-08-13 Whois
    105. 124.53.117.62 8080 high anonymity South Korea 2006-08-13 Whois
    106. 196.7.0.160 80 transparent South Africa 2006-08-13 Whois
    107. 203.113.130.60 80 high anonymity Vietnam 2006-08-13 Whois
    108. 202.159.203.196 80 transparent India 2006-08-13 Whois
    109. 200.88.223.98 80 anonymous Dominican Republic 2006-08-13 Whois
    110. 218.111.124.49 80 high anonymity Malaysia 2006-08-13 Whois
    111. 212.162.158.85 80 transparent Saudi Arabia 2006-08-13 Whois
    112. 198.70.193.56 8080 high anonymity United States 2006-08-13 Whois
    113. 200.65.127.163 3128 transparent Mexico 2006-08-13 Whois
    114. 125.243.163.66 8080 transparent  2006-08-13 Whois
    115. 200.208.207.134 3128 transparent Brazil 2006-08-13 Whois
    116. 203.149.62.69 3128 transparent Thailand 2006-08-13 Whois
    117. 166.90.205.125 8080 anonymous United States 2006-08-13 Whois
    118. 80.81.53.7 8080 transparent Latvia 2006-08-13 Whois
    119. 210.79.149.214 8080 high anonymity Japan 2006-08-13 Whois
    120. 221.143.16.172 8080 high anonymity South Korea 2006-08-13 Whois
    121. 202.159.203.12 80 transparent India 2006-08-13 Whois
    122. 222.124.3.26 8080 transparent Indonesia 2006-08-13 Whois
    123.  
    124. Sites Where You Can Find More Proxy Lists and Security Tips
    125.  
    126. Site 1 Site 2 Site 3
    127. Site 4 Site 5 Site 6
    128. Site 7 Site 8 Site 9
    129.  
    130.  
    131. IP Port Type Country Last Test
    132. 87.240.6.90 8080 high anonymity Russian Federation 2006-08-13 Whois
    133. 203.198.162.124 8080 anonymous Hong Kong 2006-08-13 Whois
    134. 125.63.70.4 3128 transparent  2006-08-13 Whois
    135. 66.98.238.8 8080 anonymous United States 2006-08-13 Whois
    136. 218.25.163.20 80 high anonymity China 2006-08-13 Whois
    137. 203.177.143.49 80 high anonymity Philippines 2006-08-13 Whois
    138. 211.195.40.217 8080 high anonymity South Korea 2006-08-13 Whois
    139. 200.225.194.49 80 transparent Brazil 2006-08-13 Whois
    140. 203.149.62.67 8080 transparent Thailand 2006-08-13 Whois
    141. 125.243.207.131 8080 transparent  2006-08-13 Whois
    142. 218.111.124.51 80 high anonymity Malaysia 2006-08-13 Whois
    143. 61.74.245.206 8080 high anonymity South Korea 2006-08-13 Whois
    144. 125.244.11.195 8080 transparent  2006-08-13 Whois
    145. 202.159.203.115 80 transparent India 2006-08-13 Whois
    146. 85.185.236.229 3128 transparent Iran 2006-08-13 Whois
    147. 200.42.209.2 3128 transparent Dominican Republic 2006-08-13 Whois
    148. 61.252.217.190 8080 high anonymity South Korea 2006-08-13 Whois
    149. 222.110.5.166 8080 high anonymity South Korea 2006-08-13 Whois
    150. 202.108.119.227 80 anonymous China 2006-08-13 Whois
    151. 213.172.45.250 8080 anonymous Spain 2006-08-13 Whois
    152.  
    153.  Safe Surfing Suite™ combines three powerful privacy solutions to protect your identity on the Internet!
    154.  
    155. Anonymous Surfing™ protects you and your family from online identity theft by keeping your IP address (and your identity) private.
    156. Anonymizer Anti-Spyware™ now prevents spyware before it is downloaded onto your PC through its real-time, Active-X shield.
    157. Anonymizer Digital Shredder Lite™ is the easiest way to keep your PC clean and running smoothly.
    158. More information...
    159.  
    160.  
    161.  
    162.  
    163. IP Port Type Country Last Test
    164. 213.150.171.34 8080 anonymous Tunisia 2006-08-13 Whois
    165. 202.159.203.228 80 transparent India 2006-08-13 Whois
    166. 159.148.229.4 8080 anonymous Latvia 2006-08-13 Whois
    167. 202.159.203.62 80 transparent India 2006-08-13 Whois
    168. 210.213.105.234 3128 transparent Philippines 2006-08-13 Whois
    169. 202.159.203.124 80 transparent India 2006-08-13 Whois
    170. 202.159.203.106 80 transparent India 2006-08-13 Whois
    171. 202.159.203.93 80 transparent India 2006-08-13 Whois
    172. 165.228.133.10 3128 transparent Australia 2006-08-13 Whois
    173. 85.18.252.145 3128 transparent Italy 2006-08-13 Whois
    174. 217.219.128.69 80 transparent Iran 2006-08-13 Whois
    175. 210.21.75.114 8080 anonymous China 2006-08-13 Whois
    176. 218.11.207.244 80 anonymous China 2006-08-13 Whois
    177. 61.220.150.2 3128 transparent Taiwan 2006-08-13 Whois
    178. 203.149.62.66 80 transparent Thailand 2006-08-13 Whois
    179. 202.159.203.212 80 transparent India 2006-08-13 Whois
    180. 211.153.44.155 8080 anonymous China 2006-08-13 Whois
    181. 202.159.203.156 80 transparent India 2006-08-13 Whois
    182. 195.212.15.100 80 high anonymity Great Britain (UK) 2006-08-13 Whois
    183. 200.81.94.59 80 transparent Argentina 2006-08-13 Whois
    184. 202.159.203.207 80 transparent India 2006-08-13 Whois
    185. 195.212.15.200 80 high anonymity Great Britain (UK) 2006-08-13 Whois
    186. 193.170.68.247 8080 transparent Austria 2006-08-13 Whois
    187. 61.108.41.2 3128 transparent South Korea 2006-08-13 Whois
    188. 200.129.168.1 8080 anonymous Brazil 2006-08-13 Whois
    189. 201.147.158.52 8080 anonymous Mexico 2006-08-13 Whois
    190. 202.159.203.177 80 transparent India 2006-08-13 Whois
    191. 80.80.12.125 80 transparent Denmark 2006-08-13 Whois
    192. 61.8.251.92 80 anonymous Singapore 2006-08-13 Whois
    193. 202.159.203.150 80 transparent India 2006-08-13 Whois
    194. 202.159.203.52 80 transparent India 2006-08-13 Whois
    195. 202.159.194.173 80 transparent India 2006-08-13 Whois
    196. 193.251.147.244 8080 transparent Chad 2006-08-13 Whois
    197. 201.21.144.96 8080 anonymous Brazil 2006-08-13 Whois
    198. 61.129.52.144 8888 anonymous China 2006-08-13 Whois
    199. 200.45.249.190 3128 transparent Argentina 2006-08-13 Whois
    200. 200.215.113.172 80 anonymous Brazil 2006-08-13 Whois
    201. 202.159.203.23 80 transparent India 2006-08-13 Whois
    202. 165.228.128.10 3128 transparent Australia 2006-08-13 Whois
    203. 202.54.110.161 80 high anonymity India 2006-08-13 Whois
    204. 211.176.182.69 8080 high anonymity South Korea 2006-08-13 Whois
    205. 219.209.48.150 8080 high anonymity Japan 2006-08-13 Whois
    206. 202.159.203.45 80 transparent India 2006-08-13 Whois
    207. 211.76.97.230 80 transparent Taiwan 2006-08-13 Whois
    208. 211.193.79.249 8080 high anonymity South Korea 2006-08-13 Whois
    209. 202.194.210.9 3128 anonymous China 2006-08-13 Whois
    210. 202.159.203.238 80 transparent India 2006-08-13 Whois
    211. 213.136.105.2 80 anonymous Ivory Coast 2006-08-13 Whois
    212. 202.159.203.202 80 transparent India 2006-08-13 Whois
    213. 200.148.158.129 3128 transparent Brazil 2006-08-13 Whois
    214. 84.96.70.155 8080 transparent France 2006-08-13 Whois
    215. 61.47.15.133 8080 transparent Thailand 2006-08-13 Whois
    216. 222.99.195.121 8080 high anonymity South Korea 2006-08-13 Whois
    217. 212.162.158.82 8080 transparent Saudi Arabia 2006-08-13 Whois
    218. 212.93.193.72 80 transparent Saudi Arabia 2006-08-13 Whois
    219.  
    220.  
    221.  
    222.  
    223. Top Anonymizer Tools
    224.  
    225. Safe Surfing Suite
    226. Anti-Spyware
    227. Net Nanny
    228. Total Net Shield
    229. Anonymous Surfing
    230.  
    231.  
    232.  
    233. Free Tools
    234.  
    235. Free Spyware Scanner
    236. Anonymous Surfing Trial
    237.  
    238.  
    239.  
    240.  
    241. Solutions for your privacy!
    242.  
    243. Anti-Spyware
    244. Detects spyware and tracking programs that antivirus software won’t discover because they are not viruses.
    245.  
    246. Safe Surfing Suite
    247. Combines Anonymous Surfing, Anti-Spyware and Digital Shredder Lite into one solution!
    248.  
    249. Clear All History
    250. Cleans your history, cookies, and browsers cache, and it also cleans the Windows recycle bin, temp directory, recent document list and much more.
    251.  
    252. Total Net Shield
    253. Shield all of your web communications from the online spying and snooping.
    254.  
    255. Anonymizer
    256. Protect your privacy and keep your vital information \"unlisted\" with one click.
    257.  
    258.  
    259.  
    260.  
    261.  
    262.  
    263.  
    264. ";
    265.  
    266. preg_match_all('#([0-9]{1,3}\.){3}([0-9]{1,3})#',$txt,$matches);
    267.                for ($i=0; $i<count($matches[0]); $i++)
    268.                echo $matches[0][$i]."<br>";
    269.  
    270. ?>
    271.  
    272.  
    текст с http://publicproxyservers.com/page1.html

    Ответ скрипта:



    Код (Text):
    1.  
    2.  
    3. 201.65.178.130
    4. 202.159.203.185
    5. 210.222.254.227
    6. 203.109.34.34
    7. 69.212.128.5
    8. 125.243.163.67
    9. 203.113.130.49
    10. 124.53.117.62
    11. 196.7.0.160
    12. 203.113.130.60
    13. 202.159.203.196
    14. 200.88.223.98
    15. 218.111.124.49
    16. 212.162.158.85
    17. 198.70.193.56
    18. 200.65.127.163
    19. 125.243.163.66
    20. 200.208.207.134
    21. 203.149.62.69
    22. 166.90.205.125
    23. 80.81.53.7
    24. 210.79.149.214
    25. 221.143.16.172
    26. 202.159.203.12
    27. 222.124.3.26
    28. 87.240.6.90
    29. 203.198.162.124
    30. 125.63.70.4
    31. 66.98.238.8
    32. 218.25.163.20
    33. 203.177.143.49
    34. 211.195.40.217
    35. 200.225.194.49
    36. 203.149.62.67
    37. 125.243.207.131
    38. 218.111.124.51
    39. 61.74.245.206
    40. 125.244.11.195
    41. 202.159.203.115
    42. 85.185.236.229
    43. 200.42.209.2
    44. 61.252.217.190
    45. 222.110.5.166
    46. 202.108.119.227
    47. 213.172.45.250
    48. 213.150.171.34
    49. 202.159.203.228
    50. 159.148.229.4
    51. 202.159.203.62
    52. 210.213.105.234
    53. 202.159.203.124
    54. 202.159.203.106
    55. 202.159.203.93
    56. 165.228.133.10
    57. 85.18.252.145
    58. 217.219.128.69
    59. 210.21.75.114
    60. 218.11.207.244
    61. 61.220.150.2
    62. 203.149.62.66
    63. 202.159.203.212
    64. 211.153.44.155
    65. 202.159.203.156
    66. 195.212.15.100
    67. 200.81.94.59
    68. 202.159.203.207
    69. 195.212.15.200
    70. 193.170.68.247
    71. 61.108.41.2
    72. 200.129.168.1
    73. 201.147.158.52
    74. 202.159.203.177
    75. 80.80.12.125
    76. 61.8.251.92
    77. 202.159.203.150
    78. 202.159.203.52
    79. 202.159.194.173
    80. 193.251.147.244
    81. 201.21.144.96
    82. 61.129.52.144
    83. 200.45.249.190
    84. 200.215.113.172
    85. 202.159.203.23
    86. 165.228.128.10
    87. 202.54.110.161
    88. 211.176.182.69
    89. 219.209.48.150
    90. 202.159.203.45
    91. 211.76.97.230
    92. 211.193.79.249
    93. 202.194.210.9
    94. 202.159.203.238
    95. 213.136.105.2
    96. 202.159.203.202
    97. 200.148.158.129
    98. 84.96.70.155
    99. 61.47.15.133
    100. 222.99.195.121
    101. 212.162.158.82
    102. 212.93.193.72
     
  21. X-Cray

    X-Cray Активный пользователь

    С нами с:
    10 июл 2006
    Сообщения:
    255
    Симпатии:
    0
    Адрес:
    Москва
    Для тех, кто хочет проверить IP на 0-255:

    замените
    PHP:
    1. echo $matches[0][$i]."<br>";
    на

    PHP:
    1. echo (max(explode(".",$matches[0][$i]))>255 ? "неправильный IP" : $matches[0][$i])."<br>";
    PS с быстродействием регулярки с длинным условием [0-2][0-9] .. и т.д. не сравнивал.
     
  22. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    это неправильный рег для поиска ip адресов, хотя для многих применений вполне сойдёт
     
  23. X-Cray

    X-Cray Активный пользователь

    С нами с:
    10 июл 2006
    Сообщения:
    255
    Симпатии:
    0
    Адрес:
    Москва
    Это не аргумент... ты правильный напиши :) :) :)
     
  24. Raa

    Raa Активный пользователь

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Ржу :)

    Во-первых, [0-9] обозначается как \d (digital)

    А чем вам не нравится первый вариант?

    Код (Text):
    1. /(\d{1,3}\.){3}(\d{1,3})/
    Если регулярка захватывает мусор, это еще не значит, что она неправильная. В любом случае ничто не мешает ее использовать в таком виде. А чтобы массив не содержал лишней ерунды пиши так:

    Код (Text):
    1. /(?:\d{1,3}\.){3}(?:\d{1,3})/
    Тогда регулярка будет захватывать только целый IP без его частей. Но это - абсолютно не меняет результат, если ты все правильно сделал.

    Что касается правильности чисел - то эту задачу лучше вынести за область регулярки. Является ли строка 345.567.678.789 адресом IP? И да и нет. С одной стороны таких IP-адресов не бывает. С другой стороны, маловероятно, что такая строка может еще от куда-то взяться. Скорее всего это либо неправильный адрес IP, либо уникальный случай попадание левой строки под шаблон регулярки. Можно сделать так (регулярку сокращаю, ибо очень длинная):

    Код (Text):
    1. /(?:(?:0|1|2|3|...|255)\.){3}(?:0|1|2|3|...|255)/
    Эта регулярка будет захватывать только "правильные" IP. Это, по-вашему, и есть "правильная" регулярка, которую вы пытаетесь придумать? А если у нас попадется вот такая строка?

    "d4fg.3453.sd.0.43.64.120.45b64.df453"

    Где вы тут видете адрес IP? Я не знаю что это, но явно не то что мы ищем. Однако, даже последняя регулярка ошибется и выхватит "правильный" ай-пи: 0.43.64.120, хотя это вовсе не ай-пи, а лишь часть чего-то другого. Думаю, вероятность попасть в такой маргарин намного выше, чем найти отдельностоящую комбинацию типа "456.567.678.789". Так что вместо того, чтобы переживать за выпадение из допустимого диапозона (ну в крайнем случае поставь вместо '\d{1,3}' выражение, допускающее числа до 300: '[0-2]?\d{1,2}'), лучше позаботиться о правильном контексте. Если автор регулярки знает, от куда он вытаскивает адреса, то ему должно быть известно, что вокруг этого адреса. В крайнем случае, мы можем быть уверены, что вокруг адреса не могут быть буквы, цифры и точки. Иначе это уже не ай-пи адрес, а часть чего-то другого, как в примере выше. Пишем регулярку с уточнением контекста:

    Код (Text):
    1. /(?<!\w\.)(?:[0-2]?\d{1,2}\.){3}(?:[0-2]?\d{1,2})(?!\w\.)/

    Так мы обозначили, что перед и после адреса не могут быть буквы, цифры, знаки подчеркивания и точки. Теперь вероятность того, что вместо адреса ай-пи будет что-то другое, снизилась достаточно сильно. Так же мы ограничили диапозон чисел от 0 до 299, что еще сильнее снижает риск захватить что-то не то. У кого паранойя, можете перечислить все числа от 0 до 255: '(?:0|1|2|3|...|255)' - только вместо троеточия продолжите ряд. Но я не вижу смысла делать этого. Потому что даже отдельно стоящая строка вида "192.168.0.1" может оказаться не адресом ай-пи, а чем-то другим. К сожалению, регулярные строки не могут извлеч смысл. И единственный вариант избежать ошибки - определить контекст, как это сделано в последнем варианте.
     
  25. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Raa, да вы писатель...

    Я для поиска ip собрал себе такой рег:

    '\b((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])\b'si