git 초기화 설정시 다음 명령을 주면 초기화된다.
find . -name .git | xargs rm -rf
다시 받아서 하자…
Alto ventos est coeptis utque fecit. Phoebe sine circumfuso arce. Tanto aliis. Matutinis cornua origo formaeque animal mundo. Chaos: fabricator. Natura mundo caesa addidit. Cuncta habendum meis omni ille formaeque emicuit septemque et. Lege fecit aethere porrexerat gentes horrifer formas.
git 초기화 설정시 다음 명령을 주면 초기화된다.
find . -name .git | xargs rm -rf
다시 받아서 하자…
fatal : this operation must be run in a work tree!
해당 오류가 나오면, “git –work-tree=/<경로> 명령어”로 대처한다.
please tell me who you are…
이라는 오류가 나오면, 다음과 같이 해결한다.
git init
git config user.name “someone”
git config user.email “someone@someplace.com”
git add *
git commit -m “some init msg”
전자우편 주소:
/^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/
URL:
/^(file|gopher|news|nntp|telnet|https?|ftps?|sftp):\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/
HTML 태그 - HTML tags:
/\<(/?[^\>]+)\>/
전화 번호 - 예, 123-123-2344 혹은 123-1234-1234:
/(\d{3}).*(\d{3}).*(\d{4})/
날짜 - 예, 3/28/2007 혹은 3/28/07:
/^\d{1,2}\/\d{1,2}\/\d{2,4}$/
jpg, gif 또는 png 확장자를 가진 그림 파일명:
/([^\s]+(?=\.(jpg|gif|png))\.\2)/
1부터 50 사이의 번호 - 1과 50 포함:
/^[1-9]{1}$|^[1-4]{1}[0-9]{1}$|^50$/
16 진수로 된 색깔 번호:
/#?([A-Fa-f0-9]){3}(([A-Fa-f0-9]){3})?/
적어도 소문자 하나, 대문자 하나, 숫자 하나가 포함되어 있는 문자열(8글자 이상 15글자 이하) - 올바른 암호 형식을 확인할 때 사용될 수 있음:
/(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,15}/
숫자만 가능 : [ 0 ~ 9 ] 주의 : 띄어쓰기 불가능
/^[0-9]+$/
이메일 형식만 가능
/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/
한글만 가능 : [ 가나다라 … ] 주의 : ㄱㄴㄷ… 형식으로는 입력 불가능 , 띄어쓰기 불가능
/^[가-힣]+$/
한글,띄어쓰기만 가능 : [ 가나다라 … ] 주의 : ㄱㄴㄷ… 형식으로는 입력 불가능 , 띄어쓰기 가능
/^[가-힣\s]+$/
영문만 가능 :
/^[a-zA-Z]+$/
영문,띄어쓰기만 가능
/^[a-zA-Z\s]+$/
전화번호 형태 : 전화번호 형태 000-0000-0000 만 받는다. ]
/^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$/
도메인 형태, http:// https:// 포함안해도 되고 해도 되고
/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/
도메인 형태, http:// https:// 꼭 포함
/^((http(s?))\:\/\/)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/
도메인 형태, http:// https:// 포함하면 안됨
/^[^((http(s?))\:\/\/)]([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/
한글과 영문만 가능
/^[가-힣a-zA-Z]+$/;
숫자,알파벳만 가능
/^[a-zA-Z0-9]+$/;
주민번호, -까지 포함된 문자열로 검색
/^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$/
Jquery 에서는 $.test() 메서드로,
PHP 에서는 preg_match() 함수로 사용
정규표현식의 기본 문법
정규표현식은 소프트웨어에 따라서 방식이나 지원 범위가 다를 수 있습니다.
| ^The | The로 시작하는 문자열 |
| of despair$ | of despair로 끝나는 문자열 |
| ^abc$ | abc로 시작하고 abc로 끝나는 문자열 (abc 라는 문자열도 해당됨) |
| notice | notice가 들어 있는 문자열 |
| ab* | a 다음에 b가 0개 이상 (a, ab, abbb 등등) |
| ab+ | a 다음에 b가 1개 이상 (ab, abbb 등등) |
| ab? | a 다음에 b가 있거나 없거나 (ab 또는 a) |
| ab{2} | a 다음에 b가 2개 있는 문자열 (abb) |
| ab{2,} | a 다음에 b가 2개 이상 (abb, abbbb 등등) |
| ab{3,5} | a 다음에 b가 3개에서 5개 사이 (abbb, abbbb, 또는 abbbbb) |
*, +, ?는 각각 {0,}, {1,}, {0,1}과 같습니다.
| ( )는 문자열을 묶음 처리할 때 사용 | |
| a(bc)* | a 다음에 bc가 0개 이상 (묶음 처리) |
| a(bc){1,5} | a 다음에 bc가 1개에서 5개 사이 |
| hi|hello | hi나 hello가 들어 있는 문자열 |
| (b|cd)ef | bef 또는 cdef |
| (a|b)*c | a와 b가 섞여서 여러번 나타나고 그뒤에 c가 붙어있는 패턴 |
| . (점) | 임의의 한 문자 |
| ^.{3}$ | 3문자로만 되어 있는 문자열 |
| [ ] | 괄호 안에 있는 내용 중 임의의 한 문자 |
| [^ ] | 첫문자로 ^를 쓰면 괄호 내용의 부정. 즉 괄호 안에 포함되지 않는 한 문자 |
| [ab] | a 또는 b (a|b 와 동일한 표현) |
| [a-d] | 소문자 a에서 d까지 (a|b|c|d 또는 [abcd] 와 동일) |
| ^[a-zA-Z] | 영문자로 시작하는 문자열 |
| [0-9]% | % 문자 앞에 하나의 숫자가 붙어 있는 패턴 |
| %[^a-zA-Z]% | 두 % 문자 사이에 영문자가 없는 패턴 |
| 특수 문자 자체를 검색하기 및 사용하기 | |||
| \^ | ^ | \. | . |
| \[ | [ | \$ | $ |
| \( | ( | \) | ) |
| \| | | | \* | * |
| \+ | + | \? | ? |
| \{ | { | \\ | \ |
| \n | 줄넘김 문자 | \r | 리턴 문자 |
| \w | 알파벳과 _ (언더바) | \W | 알파벳과 _ 가 아닌 것 |
| \s | 빈 공간(space) | \S | 빈 공간이 아닌 것 |
| \d | 숫자 | \D | 숫자가 아닌 것 |
| \b | 단어와 단어 사이의 경계 | \B | 단어 사이의 경계가 아닌 것 |
| \t | Tab 문자 | \xnn | 16진수 nn에 해당하는 문자 |
[ ] 안에서는 특수 문자가 모두 효력을 잃게 됩니다.
| 검색 + 치환을 위한 하부식(부분식) |
| ( )로 둘러싼 부분은 각각 하나의 덩어리로 취급해서, 검색시 ( ) 안에 해당되는 내용들을 변경할 내용에서 그대로 가져다 이용할 수 있습니다. 검색된 각각의 ( )안에 해당되는 내용은 변경할 내용에서 $1, $2, .. 등으로 지정해서 쓸 수 있습니다. |
| 예제) mp3파일 이름 바꾸기 검색 : (.*) – (.*)\.mp3 .*은 길이에 상관없이 임의의 문자열, \.은 점 치환 : $2 – $1.mp3 앞에서 검색한 ( )안에 해당되는 내용끼리 순서 바꾸기 ex) “제목 – 연주자.mp3” Þ “연주자 – 제목.mp3” |
| 앞에서 정의한 하부식을 다시 활용하기 (제가 잘못 이해한 것일 수도 있는데) |
| \n은 ( ) 하부식 중에서 n번째 하부식을 가리킵니다. |
| 예제) (.+)\1+ \1로 되어 있으니까 첫번째 부분식 (.+)를 가리킵니다. 위 내용을 해석하자면, 일단 (.+)가 있으니까 이에 해당되는 내용을 찾고, \1+이 있으니까 첫번째 부분식 (.+)와 똑같은 내용이 그 뒤에 1번 이상 있는 문자열을 찾습니다. |
| 예제) abab같은 문자열이 위에 해당되는데, 일단 (.+) 즉 임의의 문자열 ab를 찾고 그 뒤에 \1+로 첫번째 부분식을 다시 1번 이상 있는 것을 찾으니까 뒤의 ab가 이에 해당합니다. |
| 변경자 ? 검색 방식 변경 | |
| (?i) | 대소문자 무시 (기본값) |
| (?-i) | 대소문자 구분 |
| (?g) | “greedy” 모드로 전환 (기본값) |
| (?-g) | “greedy” 모드 해제, 따라서 “+”는 “+?”과 동일한 것으로 인식 |
*ⓥ는 valid, ⓘ는 invalid
*형광 초록 바탕 부분은 매칭되는 부분.
*예제는 javascript 기준이며, 언어에 따라 다소 차이가 발생할 수 있다.
| 문자 | 용도 | 예제 |
|---|---|---|
| \ |
|
|
| ^ | 문자열의 시작. []안에서는 not의 의미 * ^A는 “A로 시작”이라기 보다는 “시작 직후에 A가 나온다”는 의미로 해석하는 것이 좋다. 즉, 시작과 끝과 같은 빈 공간을 하나의 문자로 간주하는 것이 좋다. |
/^A/g
/[^A]/g
|
| $ | 문자열의 마지막 | /t$/
|
| * | 0번 이상 반복 | /ab*d/g
|
| + | 1번 이상 반복 ( = {1,} ) | /ab+d/g
|
| ? | 0번 이나 1번 | /e?le?/g
/abc\-?d/g
|
| . | new line 을 제외한 모든 글자 | /.n/g
|
| (x) | x를 체크하고 체크한 값을 변수로 저장 | /(f..) (b..)/
|
| (?:x) | x를 체크하고 체크한 값을 변수로 저장하지 않음 | /(?:f..) (b..)/
|
| x|y | x 또는 y | /green|red/
|
| x(?=y) | x후에 y가 나오고, x부분만 매칭되는 부분으로 간주 | /blah(?=soft|hard)/
/blah(?=soft).*/
|
| x(?!y) | x가 나오고 그 뒤에 y가 있으면 안 됨 | /blah(?!hard)/
|
| {n} | 앞에 지정한 것이 n개 | /.{3}/
|
| {n,} | 앞에 지정한 것이 n개 이상 | /.{3,}/
|
| {n,m} | 앞에 지정한 것이 n~m개 | /.{3,5}/
|
| [xyz] | x나 y나 z. []안에는 얼마든지 쓸 수 있다. | /[abc]{2}/
|
| [x-z] | x에서 z까지 | /[a-z]{4,}/g
|
| [^xyz] | x,y,z를 제외한 나머지 모든 것 | /[^a-z]{2,}/g
|
| [\b] | 백스페이스. \b와 혼동하지 말것. | /[\b]/g
일반적인 String에서는 \b가 백스페이스를 의미한다. |
| \b | 단어의 경계.[\b]와 혼동하지 말것. | /\bn[a-z]/g
|
| \B | \b 를 제외한 전부 | /\Bn[a-z]/g
|
| \cX | 컨트롤X와 매칭. \cM은 컨트롤M과 매칭 | |
| \d | 숫자.[0-9]와 같음 | /\d/g
/^0[0-9]{2}/g
|
| \D | \d 를 제외한 전부 | /\D/g
|
| \f | form-feed | |
| \n | new line | |
| \r | carriage return | |
| \s | white space ex>탭, 띄어쓰기, \n, \r |
/k\s/g
|
| \S | \s 를 제외한 전부 | /k\S/g
|
| \t | 탭 | |
| \v | vertical tab | |
| \w | 알파벳+숫자+_. [A-Za-z0-9_]와 동일 | /\w/g
|
| \W | \w 빼고 전부 | /\W/g
|
| \n | \n이 자연수일때, ()로 지정한 n번째 정규식 | /(.{2})e tru\1 is out \1ere/
(th)가 \1로 지정된다. |
| \xhh | hh는 hexacode, | /[\x21-\x40]/g
|
| \uhhhh | hhhh는 hexacode, | /[\u3131-\u3163\uac00-\ud7a3]/g
코드 번호> 3131:ㄱ 3163:ㅣ ac00:가 d7a3:힣 (javascript, java) |
/^[0-9]/
|
/^\w+$/
|
/^[a-zA-Z][\w\-]{4,11}$/
|
/^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}/
|
/^0\d{1,2}-[1-9]\d{2,3}-\d{4}$/
|
/^[\.a-zA-Z0-9\-]+\.[a-zA-Z]{2,}/
|
/^(?:[\w\-]{2,}\.)+[a-zA-Z]{2,}$/
|
/^[_a-zA-Z0-9\-]+@[\._a-zA-Z0-9\-]+\.[a-zA-Z]{2,}/
|
/^[\w\-]+@(?:[\w\-]{2,}\.)+[a-zA-Z]{2,}$/
|
/^([a-z]+):\/\/((?:[a-z\d\-]{2,}\.)+[a-z]{2,})(:\d{1,5})?(\/[^\?]*)?(\?.+)?$/i
|
/^[ㄱ-ㅣ가-힣]+$/
|
| 함수 | 코드예제 | 코드설명 |
|---|---|---|
| Array RegExp.exec (to be checked) |
var myRe=/d(b+)(d)/ig;
var myArray = myRe.exec(“cdbBdbsbz”); /d(b+)(d)/gi
|
myArray.index =1 ; (처음으로 매칭되는 위치, 컴터가 늘 그렇듯 위치는 0번째부터 센다.) myArray.input = cdbBdbsbz; (체크할 대상) myArray[0] = dbBd;(검사에 통과한 부분) myArray[1] = bB;(1번째 괄호에서 체크된 부분) myArray[2] = d;(2번째 괄호에서 체크된 부분) myRe.lastIndex =5 ; (다음번 체크를 하기위한 위치.) RegExp.$_ = cdbBdbsbz;(입력한 스트링) |
| boolean RegExp.test(to be checked) |
var myRe=/d(b+)(d)/ig;
var checked = myRe.test(“cdbBdbsbz”); document.write(“checked = ” + checked +”;<br>”); /d(b+)(d)/gi
|
실행결과: checked = true; |
| String RegExp.toString() |
var myRe=/d(b+)(d)/ig;
var str = myRe.toString(); document.write(str); |
실행 결과: /d(b+)(d)/gi |
| String String.replace(pattern or string, to be replaced) |
var str = “abcdefe”;
document.write(str.replace(“e” , “f”)); |
실행 결과: abcdffe
e가 2번 있지만, 첫번째 인자가 정규식이 아니라 문자열일 경우는 첫번째 것만 바꾼다. |
|
var str = “aba”;
document.write(str.replace(/^a/ , “c”)); |
실행 결과: cba | |
|
var re = /(\w+)\s(\w+)/;
var str = “John Smith”; newstr = str.replace(re, “$2, $1”); document.write(newstr) |
실행 결과: Smith, John
re에 의해서 찾아진 문자열 들은 re에서 ()로 표현된 순서대로 $1, $2와 같이 변수로 저장된다. |
|
|
var re = /\s(?:http|https):\/\/\S*(?:\s|$)/g;
var str = “url is http://iilii.egloos.com/ !!\n”; str += “blah home: http://www.blah.co.kr”; newstr = str.replace(re, function (str,p1,offset,s) { return “<a href='” + str + “‘>” + str + “</a>”; } ).replace(/\n/, “<br>”); document.write(newstr); |
url is http://iilii.egloos.com/ !! blah home: http://www.blah.co.kr str: 찾은 문자열 |
|
| Array String.match(regular expression |
var str = “ABCdEFgHiJKL”;
var myResult = str.match(/[a-z]/g ); for(var cnt = 0 ; cnt < myResult.length; cnt++){ document.write(cnt +”:” + myResult[cnt] +”<br>”); } document.write(“비교<br>”); var str = “ABCdEFgHiJKL”; |
실행 결과: 0:d 1:g 2:i 비교 0:d String.match(RegExp) =>g flag가 있으면 다 찾아낸다. |
| Array String.split([separator[, limit]]) |
var str = “ABCdEFgHiJKL”;
var myResult = str.split(/[a-z]/g , 3); for(var cnt = 0 ; cnt < myResult.length; cnt++){ document.write(cnt +”:” + myResult[cnt] +”<br>”); } |
실행 결과: 0:ABC 1:EF 2:H 주어진 문자열을 separator를 기준으로 limit 만큼 자른다. |
String removeTags(input)HTML tag부분을 없애준다 |
|
function removeTags(input) {
return input.replace(/<[^>]+>/g, “”); }; |
| example>
var str = “<b>blah</b> <i>soft</i>”;
document.write(str +”<br>”); document.write(removeTags(str)); result> |
String String.trim()문자열의 앞뒤 공백을 없애준다. |
|
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, ”); }; |
| example>
var str = ” untrimed string “;
document.write(“========” + str+ “==============<br>”); document.write(“========” + str.trim() + “==============”); result> |
String String.capitalize()단어의 첫 글자를 대문자로 바꿔준다. |
|
String.prototype.capitalize = function() {
return this.replace(/\b([a-z])/g, function($1){ return $1.toUpperCase(); }) ; }; |
| example>
var str = “korea first world best”;
document.write(str.capitalize()); result> |
String number_format(input)입력된 숫자를 ,를 찍은 형태로 돌려준다 |
|
function number_format(input){
var input = String(input); var reg = /(\-?\d+)(\d{3})($|\.\d+)/; if(reg.test(input)){ return input.replace(reg, function(str, p1,p2,p3){ return number_format(p1) + “,” + p2 + “” + p3; } ); }else{ return input; } } |
| example>
document.write(number_format(1234562.12) + “<br>”);
document.write(number_format(“-9876543.21987”)+ “<br>”); document.write(number_format(“-123456789.12”)+ “<br>”); result> |
Pattern p = Pattern.compile("(a*)(b)");
Matcher m = p.matcher("aaaaab");
if (m.matches()) {
for (int i = 0; i < m.groupCount() + 1; i++) {
System.out.println(i + ":" + m.group(i));
}
} else {
System.out.println("not match!");
}
result>
0:aaaaab
1:aaaaa
2:b
0번째는 매칭된 부분.
|
String a = "I love her";
System.out.println(a.replaceAll("([A-Z])", "\"$1\""));
result>
"I" love her
자바도 $1을 쓸 수 있다.
|
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "dog");
System.out.println(sb.toString());
}
m.appendTail(sb);
System.out.println(sb.toString());
result>
one dog
one dog two dog
one dog two dogs in the yard
|
// OSX 의 경우open -a Google\ Chrome --args --disable-web-security// Linux 의 경우google-chrome --disable-web-security// Windows 의 경우, 크롬이 설치 된 폴더로 이동해서chrome.exe --disable-web-security오류) 메이븐 기반 프로젝트를 Tomcat으로 띄울려고 Run을 누르면 log4j 라이브러리를 찾을 수 없다고 에러가 난다
java: package org.apache.log4j does not exist
해결책) 이 오류는 IntelliJ에서 자동으로 만드는 xxx.iml 파일 내용중에 log4j 의 scope가 RUNTIME으로 되어 있어서 그렇다.
<orderEntry type="library" scope="RUNTIME" name="Maven: log4j:log4j:1.2.14" level="project" />
scope=”RUNTIME”을 지워준다
java.security.InvalidKeyException: Illegal key size 오류는 Java 기본 패키지의 key size 크기 제한 때문입니다. 이를 해결하는 방법은 다음과 같습니다.
* 아래의 웹페이지에서 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6 를 다운로드 받는다.
– http://www.oracle.com/technetwork/java/javase/downloads/index.html
* 위에서 다운로드 받은 파일의 압축을 해제한 후, java 실행 폴더 하위의 lib\security 폴더에 복사한다.
– java.exe 가 여러 곳에 존재할 수 있으므로 현재 실행되는 java 의 폴더를 확인한 후, 복사해 넣어야 한다.
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6 의 Readme.txt 에 아래와 같은 소개의 글이 있군요.
Due to import control restrictions, the version of JCE policy files that are bundled in the JDK(TM) 6 environment allow “strong” but limited cryptography to be used. This download bundle (the one including this README file) provides “unlimited strength” policy files which contain no restrictions on cryptographic strengths.
이 문제 때문에 몇 시간을 허비하였군요. ㅡ.ㅡ
[참고자료] http://charithaka.blogspot.com/2008/08/how-to-avoid-javasecurityinvalidkeyexce.html