Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/65: Рейтинг темы: голосов - 65, средняя оценка - 4.74
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462

Java Regexp получить подстроку

20.03.2011, 19:51. Показов 13811. Ответов 18

Студворк — интернет-сервис помощи студентам
Можно ли каким нибудь образом получить подстроку/подстроки найденные при помощи regexp'a?
к примеру, чтобы такой вызов вернул "Anton"?
Java
1
any_method("(^[a-zA-Z]+).*$", "Anton1991");
Добавлено через 2 минуты
уже нашел String input =
Цитата Сообщение от http://www.ibm.com/developerworks/ru/edu/j-intermed/section5.html
"Here is a WikiWord followed by AnotherWikiWord, then SomeWikiWord.";
Pattern pattern = Pattern.compile("[A-Z][a-z]*([A-Z][a-z]*)+");
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
System.out.println("Found this wiki word: " + matcher.group());
}
Добавлено через 1 час 40 минут
Возник еще другой вопрос:
Как из строки, начинающейся на ls, вытащить из строки все слова, которые должны быть отделены между собой и от ls одним или несколькими пробелами или табуляциями?
В конце строки может стоять знак ';', а слова должны состоять только из заглавных и прописных латинских букв цифр и знаков '-', '_', '.', '/'?
пример "ls /var/www ./folder/ ;"
матчер должен найти /var/www и ./folder/.

Пробовал так, но он возвращал всю строку если она удовлетворяла данному regex'у не выбирая слова из нее... а иногда вообще ничего не писал...
Java
1
2
3
4
5
6
7
8
Console c = System.console();
String ls_regex = "^ls[[\\s|\\t]*([a-zA-Z0-9-_\\.])*]*.*[;]?$";
Pattern pattern = Pattern.compile(ls_regex);
Matcher matcher = pattern.matcher(commandstring);
while(matcher.find()){
    String tmp = matcher.group();
    c.printf(tmp + "\n");
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2011, 19:51
Ответы с готовыми решениями:

Java. Криво работает код, который ищет в строке подстроку
Криво работает код, который ищет в строке подстроку. Есть строка, её нужно проверить на ключевые слова, они записаны в массив. Слова могут...

Нужно получить все соответсвия по маске одной командой (regexp)
На входе есть некий текст. Можно ли с помощью методов работающих с regexp получить одной командой массив со всеми соответствиями маске? ...

Как на JS с помощью объекта regexp получить массив всех совпадений?
Как на JS с помощью объекта regexp получить массив всех совпадений? var myregexp = /&lt;item*&gt;(.*?)&lt;/item&gt;/ig; var xmlData =...

18
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
20.03.2011, 20:39
Вот это выражение
Code
1
(.?/[\w]+)+/?
вернет вам /var/www и ./folder/
1
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
20.03.2011, 20:57  [ТС]
спасибо, я потихоньку вникаю в особенности java-regexp'а...
вот вывод
/home/ggrn-7da>ls /erfdf/dfgfdh /fgfdh/ghj gfj/ ghjghjf /hgj gf /
/erfdf/dfgfdh /fgfdh/ghj
почему /hgj не вывелся?
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
20.03.2011, 21:24
Code
1
[\w/_\-.]+;?
ls игнорируйте в приложении
1
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
21.03.2011, 15:42  [ТС]
я вот такое придумал...
Java
1
"(/[\\w\\s\\.-_]+)+/?$"
Все ли я предусмотрел для валидации пути в *nix без экранации пробелов(путь заключен в ')???

Добавлено через 15 минут
и подойдет ли для валидации пути в *nix данная регулярка с учетом экранации пробелов?
Java
1
"^(/((\\\\s)*[\\w\\.-_]+)+)+/?"
Добавлено через 5 минут
нет второй не работает(((

Добавлено через 11 минут
как проверить коректность введенного пути *nix с учетом обязательной экранации пробелов???
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
21.03.2011, 16:14
Code
1
(/\S[\w\s\.\-\_]+[\w\.\-\_])+/?
приведите набор данных, который должен проходить, и который не должен проходить
0
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
21.03.2011, 17:32  [ТС]
Ваша подпись говорит мне что вы знакомы с Debian'ом. Вот какие пути Debian разрешает, такие и надо и наоборот)

и опять же нет учета экранации пробела...но и не надо. я придумал как сделать)
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
21.03.2011, 18:16
gGrn-7DA, вам надо, чтобы в пути могли быть пробелы? Последний мой вариант их разрешает, запрещая их только в начале и конце имени фолдера/файла
0
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
21.03.2011, 19:05  [ТС]
оооо спс!)сразу не понял что он делает)
а тпереь про экранацию пробелов.
должна проходить валидацию запись
/var/any\ folder/fax-en_2.x
и не должна
/var/any folder/fax-en_2.x
я решаю проблему так.
проверяю есть ли в строке символ ",". если да - ошибка, иначе
замещаю "\ " на ",". и теперь надо провести предыдущую проверку только заместо пробела учитывать знак ","...
но у меня не проходит такая проверка(((

Добавлено через 23 минуты
вот вроде работает...привожу кусок кода.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if(Pattern.matches("^cd[\\s](.*)$", command)){
    String line = command.substring(2).trim();
    if(Pattern.matches("^'.*'$", line)){
        line = line.substring(1, line.length()-1).trim();
        if(Pattern.matches("^(/[\\w\\.\\-\\_][\\w\\s\\.\\-\\_]+[\\w\\.\\-\\_])+/?$", line)){
            c.printf("command: cd\npath : >%s<\n",line );
        }
    }
}
else{
    if(!Pattern.matches(",", line)){
        String sub_string = line.replace("\\ ", ",");
        if(Pattern.matches("^(/[\\w\\.\\-\\_][\\w\\.\\-\\_,]+[\\w\\.\\-\\_])+/?$", sub_string)){
            c.printf("command: cd\npath : >%s<\n",line );
        }
    }
}
Добавлено через 14 минут
забыли про про точку в начале пути и двоеточие...ну это уже сам попробую сначала)
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
21.03.2011, 19:19
gGrn-7DA, настоятельно рекомендую почитать Фридла и документацию.

Как думаешь каким будет результат?
Java
1
Pattern.matches("^'.*'$", "'1' adsfsd asdfasdf asdfa'2'")
0
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
21.03.2011, 20:45  [ТС]
вот добавил поддержку пути "/" и путей еачинающихся с "./" и "../".
осталось добавить поддержку "/./" и "/../" в середине путей...
Java
1
"^([\\.]|[\\.][\\.])?/([\\w\\.\\-\\_][\\w\\s\\.\\-\\_]+[\\w\\.\\-\\_]/?)*$"
Добавлено через 20 минут
спс
Java
1
"^'[^\\^]*'$"
Добавлено через 1 минуту
но все равно следующую валидацию не пройдет...
я кавычки обрезаю и пускаю дальше....
1' adsfsd asdfasdf asdfa'2
Java
1
if(Pattern.matches("^([\\.]|[\\.][\\.])?/([\\w\\.\\-\\_][\\w\\s\\.\\-\\_]+[\\w\\.\\-\\_]/?)*$", "1' adsfsd asdfasdf asdfa'2"))
Добавлено через 6 минут
Вот написал для поддержки "/./" и "/../" в середине путей...
но оно пропускает любое количество точек....
Java
1
"^([\\.]|[\\.]{2})?/((([\\w\\.\\-\\_][\\w\\s\\.\\-\\_]+[\\w\\.\\-\\_])|[\\.]|[\\.]{2})/?)*$"
Добавлено через 15 минут
Вот ОН - мой шедевр)))
Java
1
"^((([\\.]|[\\.]{2})?/)|([\\w\\.\\-\\_]([\\w\\s\\.\\-\\_]*[\\w\\.\\-\\_])*))*$"
дело за малым - экранация пробелов))))

Добавлено через 1 минуту
блиииин
'../...'
проходит валидацию...(

нашел где. когда ".." возврат на директорию выше и сразу имя файла нач с точки...

Добавлено через 11 минут
о_О
Линукс позволяет создавать файлы и директории, начинающиеся с любого количества точек и только из них состоящие, если они не совпадают с "." и "..", потому как те уже существуют)
но создать файл одноименный с директорией почему-то не дает)

Добавлено через 15 минут
вот конечный вариант кода:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if(Pattern.matches("^cd[\\s](.*)$", command)){
    String line = command.substring(2).trim();
    if(Pattern.matches("^'.*'$", line)){
        line = line.substring(1, line.length()-1).trim();
        if(Pattern.matches("^((([\\.]|[\\.]{2})?/)|(([\\w\\-\\_]|(/[\\.]))([\\w\\s\\.\\-\\_]*[\\w\\.\\-\\_])*))*$", line)){
            c.printf("command: cd\npath : >%s<\n",line );
        }
    }
    else{
        if(!Pattern.matches(",", line)){
            String sub_string = line.replace("\\ ", ",");
            if(Pattern.matches("^((([\\.]|[\\.]{2})?/)|(([\\w\\-\\_]|(/[\\.]))([\\w\\.\\-\\_,]*[\\w\\.\\-\\_])*))*$", sub_string)){
                c.printf("command: cd\npath : >%s<\n",line );
            }
        }
    }
}
Добавлено через 5 минут
блин!!!! никсы еще и : в именах разрешают... а какие они символы вообще разрешают?

запрещает он только
/, \, ?, <, >, *, |
Как переделать [\\w\\s\\.\\-\\_] что бы он разешал все символы кроме
/, \, ?, <, >, *, |
?
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
21.03.2011, 21:42
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
должна проходить валидацию запись
/var/any\ folder/fax-en_2.x
и не должна
/var/any folder/fax-en_2.x
я решаю проблему так.
По вашим словам, как раз, да и в реальности второй путь валидный, в реальности так же как и первый

Цитата Сообщение от gGrn-7DA Посмотреть сообщение
/, \, ?, <, >, *, |
Кто вам такое сказал? Выполните в терминале
Code
1
mkdir '/home/m128k145/s\?<>*|'
и будете удивлены.

Пока вот последний вариант:
Code
1
([\.]{0,2})(/\S[\w\s\.\-\_\\]{0,}[\w\.\-\_])+/?
0
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
21.03.2011, 22:04  [ТС]
Цитата Сообщение от M128K145 Посмотреть сообщение
[\.]{0,2}
вот я ступил)

Добавлено через 5 минут
если так сделать то /g/ не пройдет...требуется /[\w]{2}/ что бы пройти валидацию...

Добавлено через 2 минуты
ладно при заключении в ' ' можно их пользовать, а иначе - нет?

Добавлено через 6 минут
кхе-кхе
Bash
1
sudo mkdir '/   '
Добавлено через 2 минуты
ладно, тогда какие символы нельзя пользвать без заключения в ' '...
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
21.03.2011, 22:09
Code
1
([\.]{0,2})(/[\w\s\.\-\_\\]{0,}[\w\.\-\_])+/?
0
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
21.03.2011, 22:29  [ТС]
вот головная боль то. Все симолы можно экранировать и будет пахать.
как отследить отсутствие экранации у симолов " ", "<", ">", "*", "|" ?
как оказалось только они требуют...

Добавлено через 12 минут
такое пойдет?
Java
1
"(([^\\][\\s])|([^\\][<])|([^\\][>])|([^\\][\\*])|([^\\][\\|]))"
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
22.03.2011, 09:42
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
отследить отсутствие экранации у симолов " ", "<", ">", "*", "|"
Java
1
"[ <>*|](?<!\\\\)"
0
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
23.03.2011, 17:41  [ТС]
Сдал я это приложение консольное. Функционал свелся к просмотру содержимого директории + смена текущей директории + man. Ну все это расписано при запуске. Для его работы требуется консоль!))

Принимаю отзывы и предложению по улучшению интерфейса или увеличению функционала: в последствии думаю добавить команды touch, mkdir(s) и cat. А если осилю, то и nano(надеюсь лицензионные права этим не нарушу?).)))


Java
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
import java.io.Console;
import java.io.*;
import java.util.regex.Pattern;
 
public class Main {
    public static void main(String[] args) {
        Console c = System.console();
        if(c != null){
            File f = new File("");
            String path = "";
            try {
                f = f.getCanonicalFile();
                path = f.getCanonicalPath();
            }
            catch (IOException e) {
                c.printf("\n\nUnknown error.\n\n");
                e.printStackTrace();
                return;
            }
            catch(SecurityException e){
                c.printf("    cd: You have not access.\n\n");
            }
            String commandstring = "";
            String command = "";
            c.printf("\nВас приветствует файловый менеджер.\n\n");
            c.printf("Список поддерживаемых команд: man, ls, cd.\n");
            c.printf("Для получения справки введите:\n\t\"man [command]\", \"command /?\" или \"command -h(elp)\".\n\n");
            c.printf("Для выхода введите:\n\texit или q(uit).\n\n");
            while(true){
                boolean exit = false;
                c.printf(path + ">");
                commandstring = c.readLine();
                command = commandstring.replaceAll("\\s", " ").trim();
                if(Pattern.matches("^exit[;]?$|^q(uit)?[;]?$", command)) {
                    exit = true;
                    break;
                }
                else
                    //man definition
                    if(Pattern.matches("^man([\\s]+.*)*[;]?$", command)){
                        //man man definition
                        if(Pattern.matches("^man([\\s]+((-h(elp)?)|(/\\?)|(man)))?[\\s]*[;]?$", command)){
                            c.printf("\nman: you helper.\n");
                            c.printf("example: man [command].\n\n");
                        }
                        else
                            //man cd definition
                            if(Pattern.matches("^man[\\s]+(cd)[\\s]*[;]?$", command)){
                                c.printf("\ncd: change directory.\n");
                                c.printf("example: cd [dir]\n\n");
                            }
                            else
                                //man ls definition
                                if(Pattern.matches("^man[\\s]+(ls)[\\s]*[;]?$", command)){
                                    c.printf("\nls: view directory contents.\n");
                                    c.printf("example: ls [-a|-A].\n");
                                    c.printf("parameters: -a -A.\n");
                                    c.printf("with out parameters: view non-hided content.\n");
                                    c.printf("with -a: view all of directory content.\n");
                                    c.printf("with -A: view all of directory content with out \"/.\" and \"/..\".\n\n");
                                }
                    }
                    else
                        //cd definition
                        if(Pattern.matches("^cd([\\s]+.*)*[;]?$", command)){
                            if(Pattern.matches("^cd[\\s]+((-h(elp)?)|(/\\?))[\\s]*[;]?$", command)){
                                c.printf("\ncd: change directory.\n");
                                c.printf("example: cd [dir].\n\n");
                            }
                            if(command.length()>2){
                                String line = command.substring(2).trim();
                                if(Pattern.matches("^'[^']*'$", line)){
                                    line = line.substring(1, line.length()-1).trim();
                                }   
                                if(line.startsWith(".")){
                                    File F = new File(path,line);
                                    if(F.exists() && F.isDirectory()){
                                        try {
                                            f = F.getCanonicalFile();
                                            path = f.getCanonicalPath();
                                        }
                                        catch (IOException e) {
                                            c.printf("\n\nUnknown error.\n\n");
                                            e.printStackTrace();
                                        }
                                        catch(SecurityException e){
                                            c.printf("    cd: You have not access.\n\n");
                                        }
                                    }
                                    else{
                                        c.printf("    cd: Directory does not exist.\n\n",line );
                                    }
                                }
                                else{
                                    File F = new File(line);
                                    if(F.exists() && F.isDirectory()){
                                        try {
                                            f = F.getCanonicalFile();
                                            path = f.getCanonicalPath();
                                        }
                                        catch (IOException e) {
                                            c.printf("\n\nUnknown error.\n\n");
                                            e.printStackTrace();
                                        }
                                        catch(SecurityException e){
                                            c.printf("    cd: You have not access.\n\n");
                                        }
                                    }
                                    else{
                                        c.printf("    cd: Directory does't exist.\n\n",line );
                                    }
                                }
                            }
                            else{
                                c.printf("    cd: invalid diretory path.\n");
                                c.printf("    Type \"cd /?\", \"cd -h(elp)\" or \"man cd\" for help.\n\n");
                            }
                        }
                        else
                            //ls definition
                            if(Pattern.matches("^ls([\\s]+.*)*[;]?$", command)){
                                if(Pattern.matches("^ls[\\s]+((-h(elp)?)|(/\\?))[\\s]*[;]?$", command)){
                                    c.printf("\nls: view directory contents.\n");
                                    c.printf("example: ls [-a|-A].\n");
                                    c.printf("parameters: -a -A.\n");
                                    c.printf("with out parameters: view non-hided content.\n");
                                    c.printf("with -a: view all of directory content.\n");
                                    c.printf("with -A: view all of directory content with out \"/.\" and \"/..\".\n\n");
                                }
                                else
                                    if(Pattern.matches("^ls[\\s]*[;]?$", command)){
                                        //c.printf("11\n");
                                        FilenameFilter dir = new FilenameFilter(){
                                            public boolean accept(File dir, String name) {
                                                File f = new File(dir, name);
                                                return (!f.isHidden()) && f.isDirectory();
                                            }
                                        };
                                        FilenameFilter file = new FilenameFilter(){
                                            public boolean accept(File dir, String name) {
                                                File f = new File(dir, name);
                                                return (!f.isHidden()) && f.isFile();
                                            }
                                        };
                                        String[] dirs = f.list(dir);
                                        String[] files = f.list(file);
                                        c.printf("\nls:\n");
                                        if(dirs != null){   
                                            c.printf(" - directiries[%d]:\n",dirs.length);
                                            for(int i = 0; i < dirs.length; i++){
                                                c.printf("     >>%s<\n", dirs[i]);
                                            }
                                        }
                                        if(files != null){
                                            c.printf(" - files[%d]:\n",files.length);
                                            for(int i = 0; i < files.length; i++){
                                                c.printf("     >>%s<\n", files[i]);
                                            }
                                        }
                                        c.printf("\n");
                                    }
                                    else
                                        if(Pattern.matches("^ls[\\s]+(-A)[\\s]*[;]?$", command)){
                                            FilenameFilter dir = new FilenameFilter(){
                                                public boolean accept(File dir, String name) {
                                                    File f = new File(dir, name);
                                                    return f.isDirectory();
                                                }
                                            };
                                            FilenameFilter file = new FilenameFilter(){
                                                public boolean accept(File dir, String name) {
                                                    File f = new File(dir, name);
                                                    return f.isFile();
                                                }
                                            };
                                            String[] dirs = f.list(dir);
                                            String[] files = f.list(file);
                                            c.printf("\nls:\n");
                                            if(dirs != null){
                                                c.printf(" - directiries[%d]:\n",dirs.length);
                                                for(int i = 0; i < dirs.length; i++){
                                                    c.printf("     >>%s<\n", dirs[i]);
                                                }
                                            }
                                            if(files != null){
                                                c.printf(" - files[%d]:\n",files.length);
                                                for(int i = 0; i < files.length; i++){
                                                    c.printf("     >>%s<\n", files[i]);
                                                }
                                            }
                                            c.printf("\n");
                                        }
                                        else
                                            if(Pattern.matches("^ls[\\s]+(-a)[\\s]*[;]?$", command)){
                                                FilenameFilter dir = new FilenameFilter(){
                                                    public boolean accept(File dir, String name) {
                                                        File f = new File(dir, name);
                                                        return f.isDirectory();
                                                    }
                                                };
                                                FilenameFilter file = new FilenameFilter(){
                                                    public boolean accept(File dir, String name) {
                                                        File f = new File(dir, name);
                                                        return f.isFile();
                                                    }
                                                };
                                                String[] dirs = f.list(dir);
                                                String[] files = f.list(file);
                                                c.printf("\nls:\n");
                                                if(dirs != null)
                                                    c.printf(" - directiries[%d]:\n",dirs.length + 2);
                                                else
                                                    c.printf(" - directiries[%d]:\n",2);
                                                c.printf("     >>.<\n");
                                                c.printf("     >>..<\n");
                                                if(dirs != null)
                                                for(int i = 0; i < dirs.length; i++){
                                                    c.printf("     >>%s<\n", dirs[i]);
                                                }
                                                if(files!= null){
                                                    c.printf(" - files[%d]:\n",files.length);
                                                    for(int i = 0; i < files.length; i++){
                                                        c.printf("     >>%s<\n", files[i]);
                                                    }
                                                }
                                                c.printf("\n");
                                            }
                                            else{
                                                c.printf("    ls: invalid paramenters.\n");
                                                c.printf("    Type \"ls /?\", \"ls -h(elp)\" or \"man ls\" for help.\n\n");
                                            }
                            }
                if(exit) break;
            }
            c.printf("\nBye.\n");
        }
        else{
            System.out.println("*\nWhere's my console?!\n*\n*\n");
        }
    }
}
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
24.03.2011, 07:08
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
Принимаю отзывы...
1. Не нужно создавать отдельный символьный класс, состоящий из одного символа.
2. Все регулярки лучше скомпилить заранее, а не перекомпилировать их внутри цикла.
3. А если у какой-то команды тебе понадобится еще один параметр добавить? Будет еще куча if-ов. Для затравки "^ls([\\s]+.*)*[;]?$", "^cd([\\s]+.*)*[;]?$" и "^man([\\s]+.*)*[;]?$" все эти монстры сводятся к простому "^(man|cd|ls)\\s+(.*?);?$". Далее в первой группе хранится команда, во второй - параметры.

Короче, код однозначно надо рефакторить. И все-таки почитай рекомендованную мной книгу.
0
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
24.03.2011, 08:32  [ТС]
почитаю конечно, просто з последнюю неделю регексы мне весь мозг вынесли, что смог написал) замечания приму к сведению, для того и спрашивал)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.03.2011, 08:32
Помогаю со студенческими работами здесь

Регулярные выражения RegExp. Как получить текст между тегом?
Друзья, помогите пожалуйста разобраться с таким вопросом. Нужно получить текст находящийся между тегами. &lt;td rowspan=&quot;2&quot;...

получить подстроку
как получить размер контента здесь он в Content-Length: 304 HTTP/1.1 200 OK Date: Thu, 09 May 2013 15:03:59 GMT Expires: Wed, 08...

Получить подстроку
Имеется лог, в нём встречаются стоки | error_message | -&gt; &quot;Соединения с сервером. Проверьте настройки в app.xml : или обратитесь...

Получить подстроку со строки
Всем привет! Как получить подстроку со строки Например, есть строка &quot;012345&quot; и надо из нее получить подстроку &quot;345&quot; Заранее...

получить подстроку из строки
Добрый день. Есть строка, по регулярному выражению нахожу первое слово нужной подстроки в этой строке. Как найти, с какого символа по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru