Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Regex]Konwerter tekstu
Forum PHP.pl > Forum > Przedszkole
Wertas
Witam. Od ostatniego czasu udało mi się popchnąć mój skrypt jednak napotkałem parę problemów.

Pragnę zauważyć, że skrypt jest gotowy do testu i jest przykładowy tekst do konwertowania.

1. Nie jestem w stanie stworzyć regex'a do
Cytat
Dostępne rodzaje:Obrońca,Zwiadowca,Ostrze zmroku,Ostrze pieśni,Mistyczny łucznik,Śnieżna pantera,Księżycowy łuk
Dostępne rodzaje mogą zawierać maksymalnie 10 pozycji. Są to nazwy typu \w{4,10}\s\w{4,10} cos spacja cos. Ten ciąg jak mówiłem może mieć max 10 pozycji i nie mam pomysłu jak mogę takie coś ukazać:/

2. Chciałem również dowiedzieć się czy mogę wartości z 'Dostępne rodzaje' dopasować do switch'a? Bo chciałbym np wyprowadzić obrazek do każdej poszczególnej jednostki.

3.
  1. preg_match('/kamień:\w{1,11}/', $text, $kamien)
i ogólnie wszystkie surowce. Otóż jak widać Output to kamień z małej litery. Czy da się zrobić dużą albo pobrać samą wartość regex'a?

4.
Cytat
Bohater Aust Ogt ma poziom 46 i dowodzi:353 3 na Mistyczny łucznik poziomie,353 3 na Księżycowy łuk poziomie,353 3 na Mistyczny łucznik poziomie,353 3 na Księżycowy łuk poziomie,353 3 na Mistyczny łucznik
Wyciąganie takich wartości regex'em jest możliwe? Maksymalna ilość opcji to 6 maksymalna liczba to 999 maksymalna 2 liczba to 7. Chciałbym potem przedstawiać to w sposób.

Bohater Nazwa ma poziom \d{2} i dowodzi
353 jednostkami mistyczny łucznik na poziomie 3

Bardzo dziękuję za każdą odpowiedź. Proszę również o zerknięcie z grubsza na kod czy 'może być'.

  1. if (preg_match('/(Rodzaje wojsk|Dostępne rodzaje):\w{1,8}/', $text, $unit)) {
  2. switch($unit){
  3. case 'Obrońca' :
  4. echo "Jednostka obrońca<img ...";
  5. break;
  6. }
  7. } else {
  8. echo "A match was not found.";
  9. }


  1. <html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
  2. <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  3. <style type="text/css">
  4. body { text-align: center; font: small/1.3 'DejaVu Sans', arial, sans-serif; }
  5. #page {
  6. max-width: 1000px;
  7. margin: auto;
  8. text-align: left;
  9. _width: 1000px;
  10. }
  11. textarea { width: 100%; height: 20em; }
  12. </style>
  13. <?php
  14.  
  15. if (isset($_POST['submit'])) {
  16. if($_POST['text'] != '') {
  17. $text = $_POST['text'];
  18. $orig_text = $text;
  19. if (preg_match('/\w{1,6}\([0-9]{3}\|[0-9]{3}\)/', $text, $target)) {
  20. $info = "Znaleziono cel";
  21. } else {
  22. echo "A match was not found.";
  23. }
  24.  
  25. if (preg_match('/Żelazo:\w{1,11}/', $text, $zelazo)) {
  26. $info = "Znaleziono ilosc zelaza";
  27. } else {
  28. echo "A match was not found.";
  29. }
  30.  
  31. if (preg_match('/kamień:\w{1,11}/', $text, $kamien)) {
  32. $info = "Znaleziono ilosc kamienia";
  33. } else {
  34. echo "A match was not found.";
  35. }
  36.  
  37. if (preg_match('/drewno:\w{1,11}/', $text, $drewno)) {
  38. $info = "Znaleziono ilosc drewna";
  39. } else {
  40. echo "A match was not found.";
  41. }
  42.  
  43. if (preg_match('/żywność:\w{1,11}/', $text, $zywnosc)) {
  44. $info = "Znaleziono ilosc zywnosci";
  45. } else {
  46. echo "A match was not found.";
  47. }
  48.  
  49. if (preg_match('/Bohaterowie:(\s)?\d{1,3}/', $text, $bohater)) {
  50. $info = "Znaleziono ilosc bohaterow w miescie";
  51. } else {
  52. echo "A match was not found.";
  53. }
  54.  
  55. if (preg_match('/Mury poziomu(\s)?\d{1,2}/', $text, $mury)) {
  56. $info = "Znaleziono mury";
  57. } else {
  58. echo "A match was not found.";
  59. }
  60.  
  61. if (preg_match('/Wytrzymałość:\s\d{1,5}/', $text, $hpmuru)) {
  62. $info = "Znaleziono wytrzymalosc muru";
  63. } else {
  64. echo "A match was not found.";
  65. }
  66.  
  67. if (preg_match('/Wieże strażnicze poziomu(\s)?\d{1,2}/', $text, $wieze)) {
  68. $info = "Znaleziono wieze";
  69. } else {
  70. echo "A match was not found.";
  71. }
  72. #Bohater Emma ma/jest poziom/poziomu 0-99#
  73. if (preg_match_all('/Bohater \w{1,7}[\s]?\w{1,7} (ma poziom|jest poziomu) \d{2}/', $text, $lista)) {
  74. $info = "Znaleziono liste bohaterow";
  75. } else {
  76. echo "A match was not found.";
  77. }
  78.  
  79. if (preg_match('/Łączna liczba jednostek:(\s\w{1,20}(\s\w{1,20})?|(\d{5})?)/', $text, $liczba)) {
  80. $info = "Znaleziono ilosc jednostek";
  81. } else {
  82. echo "A match was not found.";
  83. }
  84.  
  85. if (preg_match('/(Rodzaje wojsk|Dostępne rodzaje):\w{1,8}/', $text, $unit)) {
  86. switch($unit){
  87. case 'Obrońca' :
  88. echo "Jednostka obrońca";
  89. break;
  90. }
  91. } else {
  92. echo "A match was not found.";
  93. }
  94.  
  95. }
  96. }
  97.  
  98.  
  99. ?>
  100.  
  101. <body>
  102.  
  103. <div id="page">
  104. <h2>Raport Konwert</h2>
  105.  
  106. Wklej np
  107. <?PHP
  108.  
  109. echo '<br><br>
  110. Polska(112|279): miejsce to okazało się dobrze chronione i twoi szpiedzy zdążyli przekazać wyłącznie podstawowe informacje, zanim zostali schwytani.
  111. Oto ich raport:
  112. Łączna liczba jednostek: Niepowstrzymana armia
  113. Bohaterowie: 1
  114. Rodzaje wojsk:Śnieżny wilk,Zwiadowca,Ostrze pieśni,Mistyczny łucznik,Druid
  115. Żelazo:9968 kamień:16725 drewno:25673 żywność:85555
  116. Mury poziomu 20. Wytrzymałość: 600
  117. Wieże strażnicze poziomu 20
  118. Bohater Gerald jest poziomu 36
  119. Bohater Arst jest poziomu 11
  120. Bohater Ax1 jest poziomu 77?';
  121.  
  122. echo '<br><br>
  123. Szpieg został wysłany do: Canna(121|299). Wyniki:
  124. Łączna liczba jednostek: 8007
  125. Bohaterowie: 5
  126. Dostępne rodzaje:Obrońca,Zwiadowca,Ostrze zmroku,Ostrze pieśni,Mistyczny łucznik,Śnieżna pantera,Księżycowy łuk
  127. Żelazo:158479 kamień:102894 drewno:70990 żywność:93300
  128. Mury poziomu 22. Wytrzymałość: 660
  129. Wieże strażnicze poziomu 21
  130. Bohater Abigail ma poziom 47 i nie dowodzi żadnymi jednostkami
  131. Bohater Thot Ogt ma poziom 17 i nie dowodzi żadnymi jednostkami
  132. Bohater Tunrida ma poziom 44 i dowodzi:322 3 na Księżycowy łuk poziomie,322 3 na Mistyczny łucznik poziomie,322 3 na Księżycowy łuk poziomie,322 3 na Mistyczny łucznik poziomie,322 3 na Księżycowy łuk poziomie;
  133. Bohater Chloe ma poziom 44 i dowodzi:322 3 na Mistyczny łucznik poziomie,322 3 na Księżycowy łuk poziomie,322 3 na Ostrze zmroku poziomie,322 3 na Księżycowy łuk poziomie,322 3 na Mistyczny łucznik poziomie;
  134. Bohater Aust Ogt ma poziom 46 i dowodzi:353 3 na Mistyczny łucznik poziomie,353 3 na Księżycowy łuk poziomie,353 3 na Mistyczny łucznik poziomie,353 3 na Księżycowy łuk poziomie,353 3 na Mistyczny łucznik poziomie;';
  135. ?>
  136.  
  137.  
  138. <p>Dane wejściowe:</p>
  139. <form method="post" action="<?php echo($PHP_SELF); ?>">
  140. <p>
  141. <textarea name="text"><?php print $orig_text; ?></textarea>
  142. </p>
  143. <p>
  144. <input type="radio" id="Kon" name="Kon" value="Kon" checked="checked" />
  145. <label for="Kon">Kon</label>
  146. </p>
  147.  
  148. <p>
  149. <input type="submit" name="submit" value="Konwertuj" />
  150. <input type="reset" value="Wyczyść" />
  151. </p>
  152. </form>
  153.  
  154. <hr />
  155.  
  156. <?php
  157. if (!empty($text)) {
  158. echo "<h3>Wynik HTML copy:</h3>";
  159. echo '<textarea name="text"><center>Szpiegowane miejsce to : '.$target[0].'<br>
  160. '.$zelazo[0].'<br>
  161. '.$kamien[0].'<br>
  162. '.$drewno[0].'<br>
  163. '.$zywnosc[0].'<br>
  164. '.$bohater[0].'<br>
  165. '.$mury[0].'<br>
  166. '.$wieze[0].'<br>
  167. '.$liczba[0].'<br>
  168. '.$hpmuru[0].'<br>
  169. '.$unit[0].'<br>
  170. ';
  171.  
  172. foreach ($lista[0] as $val) {
  173. echo $val . '<br>';
  174. }
  175. echo '</textarea>';
  176. echo "<h3>Wynik HTML:</h3>";
  177. echo '<center>Szpiegowane miejsce to : '.$target[0].'<br>
  178. '.$zelazo[0].'<br>
  179. '.$kamien[0].'<br>
  180. '.$drewno[0].'<br>
  181. '.$zywnosc[0].'<br>
  182. '.$bohater[0].'<br>
  183. '.$mury[0].'<br>
  184. '.$wieze[0].'<br>
  185. '.$liczba[0].'<br>
  186. '.$hpmuru[0].'<br>
  187. '.$unit[0].'<br>
  188. ';
  189.  
  190. foreach ($lista[0] as $val) {
  191. echo $val . '<br>';
  192. }
  193. }
  194. elseif (!empty($_POST)) {
  195. echo 'Musisz podać jakieś dane';
  196. }
  197.  
  198. ?>
  199.  
  200. </div>
  201.  
  202. </body>
  203. </html>
thek
1) A nie lepiej zrobić explode po przecinku?
2) A po co switch w pętli? wystarczy str_replace lub preg_replace
3) Nie rozumiem o co Ci chodzi.
4) Jest możliwe, ale lepiej sobie moim zdaniem podzielić to na to co przed i po dwukropku, a potem to co po dwukropku dzielić na to co przecinkiem oddzielone i dalej już nie powinno być problemu.
Wertas
1)Na pewno skaleczyłem to ale nie wiem jak to zrobić. Jak pobrać to za : ?
  1. if (preg_match('/(Rodzaje wojsk|Dostępne rodzaje):/', $text, $unit)) {
  2. $info = "Znaleziono ilosc jednostek";
  3. } else {
  4. echo "A match was not found.";
  5. }
  6.  
  7. $unit1 = explode(",", $unit);

3) tekst wprowadzany to jest np. kamień z małej litery a ja chcę żeby pokazał to z dużej litery lub aby pokazał mi samą wartość (liczbę)

2) Napisałem skrypcik, które by zamieniał te nazwy potem na obrazki

  1. $nazwy = array(
  2. #Elf koszary#
  3. 'Śnieżny wilk',
  4. 'Obrońca',
  5. 'Zwiadowca',
  6. 'Ostrze zmroku',
  7. 'Ostrze pieśni',
  8. 'Mistyczny łucznik',
  9. #Elf stajnia#
  10. 'Śnieżna pantera',
  11. 'Druid',
  12. 'Księżycowe Ostrze',
  13. 'Księżycowy łuk',
  14. #Ludzie koszary#
  15. 'Piechur',
  16. 'Pawężnik',
  17. 'Łucznik',
  18. 'Pikinier',
  19. 'Fechmistrz',
  20. 'Strzelec',
  21. #Ludzie stajnia#
  22. 'Lekka Kawaleria',
  23. 'Ciężka Kawaleria',
  24. 'Lansjer',
  25. 'Łucznik Konny',
  26. #Orkowie koszary#
  27. 'Orkowy rębacz',
  28. 'Orkowy wojownik',
  29. 'Orkowy kusznik',
  30. 'Orkowy piechur',
  31. 'Orkowy berserker',
  32. 'Orkowy arbaletnik',
  33. #Orkowie stajnia#
  34. 'Wilczy Jeździec',
  35. 'Elitarny Wilczy Jeździec',
  36. 'Jeździec Wargów',
  37. 'Kusznik Konny',
  38. #Zasoby#
  39. 'drewno',
  40. 'kamień',
  41. 'Żelazo',
  42. 'żywność'
  43. );
  44. $obrazki = array(
  45. #Elf koszary#
  46. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/3/1.gif"> Śnieżny wilk',
  47. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/3/2.gif"> Obrońca',
  48. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/3/3.gif"> Zwiadowca',
  49. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/3/4.gif"> Ostrze zmroku',
  50. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/3/5.gif"> Ostrze pieśni ',
  51. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/3/6.gif"> Mistyczny łucznik',
  52. #Elf stajnia#
  53. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/3/7.gif"> Śnieżna pantera',
  54. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/3/8.gif"> Druid',
  55. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/3/9.gif"> Księżycowe Ostrze',
  56. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/3/10.gif"> Księżycowy łuk',
  57. #Ludzie koszary#
  58. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/1/1.gif"> Piechur',
  59. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/1/2.gif"> Pawężnik',
  60. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/1/3.gif"> Łucznik',
  61. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/1/4.gif"> Pikinier',
  62. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/1/5.gif"> Fechmistrz',
  63. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/1/6.gif"> Strzelec',
  64. #Ludzie stajnia#
  65. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/1/7.gif"> Lekka Kawaleria',
  66. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/1/8.gif"> Ciężka Kawaleria',
  67. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/1/9.gif"> Lansjer',
  68. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/1/10.gif"> Łucznik Konny',
  69. #Orkowie koszary#
  70. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/2/1.gif"> Orkowy rębacz',
  71. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/2/2.gif"> Orkowy wojownik',
  72. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/2/3.gif"> Orkowy kusznik',
  73. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/2/4.gif"> Orkowy piechur',
  74. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/2/5.gif"> Orkowy berserker',
  75. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/2/6.gif"> Orkowy arbaletnik',
  76. #Orkowie stajnia#
  77. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/2/7.gif"> Wilczy Jeździec',
  78. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/2/8.gif"> Elitarny Wilczy Jeździec',
  79. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/2/9.gif"> Jeździec Wargów',
  80. '<img width="18" height="18" src="http://s1.empcraft.pl/images/soldier/2/10.gif"> Kusznik Konny',
  81. #Zasoby#
  82. '<img width="18" height="18" src="http://s1.empcraft.pl/images/ico_res_1.gif"> drew',
  83. '<img width="18" height="18" src="http://s1.empcraft.pl/images/ico_res_2.gif"> kamień',
  84. '<img width="18" height="18" src="http://s1.empcraft.pl/images/ico_res_3.gif"> Żelazo',
  85. '<img width="18" height="18" src="http://s1.empcraft.pl/images/ico_res_4.gif"> żywność'
  86. );
  87. $text = str_replace($nazwy, $obrazki, $text);


Tyle, że nie chce zadziałać jest on w obrębie
  1. if($_POST['text'] != '') { }


Nadal nie wiem jak zrobić regex'a do tego 1 punktu. Może explode(',' ,'') ale nie wiem jak pobrać cały wiersz. Jak mówiłem można mieć tam maksymalnie 10 typów. Nazwy składają się z 1 do 3 członów. W tabeli array są wszystkie nazwy i nie wiem jak to zrobić. Na razie udało mi się zrobić funkcję, która zamienia nazwę na obrazek i nazwę.

Może ktoś mi doradzić jak ten skrypt można zrobić łatwiej? Być może są zbęde funkcje preg_match i może da się zrobić to w łatwiejszy sposób.

Bardzo dziękuję za pomoc.

Proszę o pomoc

W górę

Nadal potrzeba pomocy sad.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.