Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: подскажите с регулярным выражением
Форумы портала PHP.SU » Разное » Другие языки программирования » подскажите с регулярным выражением

Страниц (1): [1]
 

1. er1313 - 19 Апреля, 2014 - 15:23:10 - перейти к сообщению
Есть три варианта строки:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  String newStr  = "2:4 (1:0, 2:0, 2:0) pso";
  2.  String newStr1 = "2:3 (0:1, 0:1) aet";
  3.  String newStr2 = "2:2 (0:1) ";


Можно ли составить универсальное регулярное выражение, которое смогло разобрать любую из трех строк выше?

Попробовал для первой строки, получилось для цифр, но не получилось для букв.

CODE (htmlphp):
скопировать код в буфер обмена
  1. String dStr1 = "(\\d{1,2}):(\\d{1,2}) (\\(\\d{1,2}):(\\d{1,2}), (\\d{1,2}):(\\d{1,2}), (\\d{1,2}):(\\d{1,2})";
  2.  
  3. Pattern pt = Pattern.compile(dStr1);
  4.            
  5. Matcher mt = pt.matcher(newStr);
  6.  
  7. if(mt.find()){
  8. System.out.println("String-->" + newStr + "  1-->" +mt.group(1) + "   2-->"+mt.group(2)+ "  3-->" +mt.group(3) + "   4-->"+mt.group(4) + "  5-->" +mt.group(5) + "   6-->"+mt.group(6)+ "  7-->" +mt.group(7) + "   8-->"+mt.group(8));
  9. }
  10.  


но если строка другая то mt.find() - ложь и разбор не происходит.

Может подскажите, правильное выражение и его применение.

Спасибо.
2. duhon - 22 Апреля, 2014 - 17:06:17 - перейти к сообщению
java незнаю, но гипотетически использовать проще регулярку, и while
CODE (htmlphp):
скопировать код в буфер обмена
  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;
  3.  
  4. public class RegexMatches
  5. {
  6.     private static final String REGEX = "(\\d{1,2}):(\\d{1,2})";
  7.     private static final String INPUT = "2:4 (1:0, 2:0, 2:0)";
  8.  
  9.     public static void main( String args[] ){
  10.        Pattern p = Pattern.compile(REGEX);
  11.        Matcher m = p.matcher(INPUT);
  12.        int count = 0;
  13.  
  14.        while(m.find()) {
  15.          count++;
  16.          System.out.println("Match number "+count);
  17.          System.out.println("1--> "+m.group(1));
  18.          System.out.println("2--> "+m.group(2));
  19.       }
  20.    }
  21. }

Результат:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Match number 1
  2. 1--> 2
  3. 2--> 4
  4. Match number 2
  5. 1--> 1
  6. 2--> 0
  7. Match number 3
  8. 1--> 2
  9. 2--> 0
  10. Match number 4
  11. 1--> 2
  12. 2--> 0


А поповоду букв вопрос непонятен.

 

Powered by ExBB FM 1.0 RC1