· 7 years ago · Sep 15, 2018, 06:12 PM
1#include <iostream>
2#include <fstream>
3#include <regex>
4
5
6using namespace std;
7
8int main()
9{
10/*
11 string wzorzec ="abc";
12
13 string str;
14 cin >> str;
15
16 if (str == wzorzec){
17 cout << "pasuje do wzorca";
18 }
19 else{
20 cout << "nie pasuje do wzorca";
21 }
22*/
23 //regex wzorzec("a.bc"); // . - dowolny znak
24 //regex wzorzec("abc*"); //ab, abc,abccc, abcccccc
25 //regex wzorzec("(abc)*"); // abc, abcabc
26 //regex wzorzec("x(abc)*"); //* - 0 lub wiecej
27 //regex wzorzec("x(abc)+"); //+ - 1 lub wiecej
28 //regex wzorzec("x(abc)?"); //? - 0 lub 1
29
30 //regex wzorzec("b[aeuiyo]b"); // [] jedna z wielu
31 //regex wzorzec("b(a|e|u|i|y|o)b"); // -||-
32
33
34 //regex wzorzec("g.*g");
35 //regex wzorzec("b(a|(g.*g)|u|i|y|o)b"); // -||-
36 //regex wzorzec("[^aeiuyo]*");
37
38 //regex wzorzec("[0123456789][0123456789][0123456789]");
39 //regex wzorzec("[0123456789]{3}");
40 //regex wzorzec("[0123456789]{9,12}"); //od 9 do 12 cyfr
41 //regex wzorzec("[0123456789]{3,}"); //minimalnie 3 cyfrowe
42 //regex wzorzec("[0123456789]{0,4}"); //max 4 cyfrowe
43
44 //regex wzorzec("(abc)g\\1");
45 //regex wzorzec("(abc)*g(hh)\\1\\2"); // ?????
46 //regex wzorzec("(abc)*h(uuup)*a*k*p*\\1k*k*\\2"); // abc, abcabc
47
48 //regex wzorzec("\\d{3}"); //dokladnie 3 cyfry
49
50 //regex wzorzec("[[:lower:]]:[[:d:]]");
51
52 //regex wzorzec("((\\w\\w\\d )|(\\d\\d\\w ))*"); //d- cyfra, w- litera, cyfra lub "_"
53 // 54_ jj9
54// string str;
55// cin >> str;
56
57 //poprawny kod pocztowy 38-123
58 //regex wzorzec("\\d{2}-\\d{3}");
59
60 //data DD:MM:RRRR, DD-MM-RRRR,
61 //regex wzorzec("\\d{2}(:|-)\\d{2}(:|-)\\d{4}");
62 //regex wzorzec("\\d{2}(:|-)\\d{2}\\1\\d{4}");
63
64 //30 dni kazdy miesiac, 01-12
65
66 //2000 -2019
67
68 //regex wzorzec("(0[123456789]|1\\d|2\\d|30)(:|-)(0[123456789]|10|11|12)\\2(20[01]\\d)");
69 //regex wzorzec("(0[1-9]|1\\d|2\\d|30)(:|-)(0[1-9]|10|11|12)\\2(20[01]\\d)");
70
71 //regex wzorzec ("abc$"); //$ - na koncu tekstu
72 //regex wzorzec ("abc"); // jak na poczatku tekstu
73 //getline(cin, str);
74 /*
75 bool t = regex_match(str, wzorzec);
76 if (t){
77 cout << "pasuje do wzorca\n";
78 }
79 else{
80 cout << "nie pasuje do wzorca\n";
81 }
82 */
83
84 /*
85 regex wzorzec("(\\d{2})(:|-)(\\d{2})\\2\\d{4}");
86 bool t2 = regex_search(str, wzorzec);
87 if (t2){
88 cout << "znalazl wzorzec w tekscie ";
89 }
90 else{
91 cout << "nie znalazl wzorca w tekscie ";
92 }
93 */
94
95// smatch m; // m - tablica wynikow: [pelne wyrazenie][]
96// regex wzorzec("(\\d{2})(:|-)(\\d{2})\\2\\d{4}");
97// bool t2 = regex_search(str, m, wzorzec);
98// if (t2){
99// cout << "znalazl wzorzec w tekscie ";
100//
101// for (int i=0; i< m.size(); i++){
102// cout << m[i] <<endl;
103// }
104//
105// cout << m.prefix() << endl;
106// cout << m.suffix() << endl;
107//
108// /*
109// cout << m[0] <<endl;
110// cout << m[1] <<endl;
111// cout << m[2] <<endl;
112// cout << m[3] <<endl;
113// */
114// }
115// else{
116// cout << "nie znalazl wzorca w tekscie ";
117// }
118
119 //regex wzorzec("(\\d{2})(:|-)(\\d{2})\\2\\d{4}");
120
121// smatch m; // m - tablica wynikow: [pelne wyrazenie][]
122// string str = "ala123@gmail.com 23 12312 sad jannowak@onet.pl kasia1998@wp.pl";
123//
124//// CEL:
125//// login: ala123, domena: gmail.com
126//// login: jannowak, domena: onet.pl
127//// login: kasia1998, domena: wp.pl
128//
129// regex wzorzec("(\\w+)@(\\w+\.(com|pl))");
130// cout << regex_replace(str, wzorzec, "login: $1, domena: $2 \n", regex_constants::format_no_copy | regex_constants::format_first_only);
131
132/*
133 bool t2 = regex_search(str, m, wzorzec);
134 if (t2){
135 cout << "znalazl: " <<endl;
136 for (int i=0; i< m.size(); i++){
137 cout << m[i] <<endl;
138 }
139
140 }
141 else{
142 cout << "nie znalazl wzorca w tekscie ";
143 }
144*/
145// smatch m;
146// fstream file("liczby.txt", std::ios::in);
147// string line;
148// regex wzorzec("\\d{2,}"); //liczby 2 i wiecej cyfrowe
149// regex wzorzec2(" (\\d) "); //liczby 2 i wiecej cyfrowe
150//
151// while (getline(file, line)){
152// //bool t2 = regex_search(line, m, wzorzec);
153// //cout << m[0];
154// cout << regex_replace(line, wzorzec2, "-$1 ", regex_constants::format_no_copy);
155// cout << regex_replace(line, wzorzec, "+$& ", regex_constants::format_no_copy);
156// }
157//
158
159 smatch m;
160 fstream file("liczby.txt", std::ios::in);
161 fstream file2("liczby2.txt", std::ios::out);
162 string line;
163 regex wzorzec("\\d{2,}"); //liczby 2 i wiecej cyfrowe
164 regex wzorzec2(" (\\d) "); //liczby 2 i wiecej cyfrowe
165
166 while (getline(file, line)){
167 file2 << regex_replace(line, wzorzec2, "-$1 ");
168 }
169 file.close();
170 file2.close();
171 file2.open("liczby2.txt", std::ios::in);
172 while (getline(file2, line)){
173 cout << regex_replace(line, wzorzec, "+$& ");
174 }
175
176
177 return 0;
178}