Erlang 의 정규 표현 식 모듈 re
다음은 re 모듈 의 예 시 를 정규 표현 식 으로 소개 합 니 다.
1. 정규 표현 식 이 일치 하여 실 행 됩 니 다. 다음은 Erlang 문서 함수 원형 을 발췌 합 니 다.
run(Subject, RE) -> {match, Captured} | nomatch
Types:
Subject = iodata() | unicode:charlist()
RE = mp() | iodata()
Captured = [CaptureData]
CaptureData = {integer(), integer()}
The same as run(Subject,RE,[]).
run(Subject, RE, Options) ->
{match, Captured} | match | nomatch | {error, ErrType}
Types:
Subject = iodata() | unicode:charlist()
RE = mp() | iodata() | unicode:charlist()
Options = [Option]
Option = anchored
| global
| notbol
| noteol
| notempty
| notempty_atstart
| report_errors
| {offset, integer() >= 0}
| {match_limit, integer() >= 0}
| {match_limit_recursion, integer() >= 0}
| {newline, NLSpec :: nl_spec()}
| bsr_anycrlf
| bsr_unicode
| {capture, ValueSpec}
| {capture, ValueSpec, Type}
| CompileOpt
Type = index | list | binary
ValueSpec = all
| all_but_first
| all_names
| first
| none
| ValueList
ValueList = [ValueID]
ValueID = integer() | string() | atom()
CompileOpt = compile_option()
See compile/2 above.
Captured = [CaptureData] | [[CaptureData]]
CaptureData = {integer(), integer()}
| ListConversionData
| binary()
ListConversionData = string()
| {error, string(), binary()}
| {incomplete, string(), binary()}
ErrType = match_limit
| match_limit_recursion
| {compile, CompileErr}
CompileErr =
{ErrString :: string(), Position :: integer() >= 0}
RE 는 세 가지 유형 이 있 습 니 다. 하 나 는 컴 파일 된 regular expression (투명 한 데이터 형식, {re pattern, term (), term (), term (), term ()} 입 니 다. re: copile 로 얻 을 수 있 습 니 다).하 나 는 list;하 나 는 바 이 너 리.
예 1: 셸 에서 실행
1> {ok, MP} = re:compile("<.*?>",[caseless]).
{ok,{re_pattern,0,0,
<<69,82,67,80,53,0,0,0,1,0,0,0,7,0,0,0,0,0,0,0,60,0,62,
...>>}}
2> re:run("<HTML><body>hello world</body></html>", MP, []).
{match,[{0,6}]}
결과 {match, [{0, 6}} 을 되 돌려 줍 니 다. 첫 번 째 위치, 6 바이트 길이 ("< HTML >") 를 표시 합 니 다.
예 2: 컴 파일 된 regular expression 을 사용 하지 않 고 문자열 목록 을 정규 표현 식 으로 사용 할 수도 있 습 니 다.
7> re:run("<HTML><body>hello world</body></html>", "<.*?>", [{capture,first,list}]).
{match,["<HTML>"]}
이 예 는 일치 하 는 위치 와 길 이 를 되 돌려 주 는 것 이 아니 라 일치 하 는 문자열 입 니 다.이 옵션 은 {capture,..., list} 을 통 해 지정 합 니 다.
예 3: 모든 일치 하 는 문자열 을 되 돌려 줍 니 다.
re:run("<HTML><body>hello world</body></html>", "<.*?>", [{capture,first,list},global]).
{match,[["<HTML>"],["<body>"],["</body>"],["</html>"]]}
돌아 오 는 일치 하 는 문자열 결과 에 새 겨 진 목록 이 하나 더 있 음 을 주의 하 십시오 ([])
예 4: 탐욕 모델 과 비 탐욕 모델 비교
9> re:run("<HTML><body>hello world</body></html>", "<.*>", [{capture,first,list},global]).
{match,[["<HTML><body>hello world</body></html>"]]}
10>
10>
10> re:run("<HTML><body>hello world</body></html>", "<.*>",
[{capture,first,list},global,ungreedy]).
{match,[["<HTML>"],["<body>"],["</body>"],["</html>"]]}
탐욕 모드 는 일치 하 는 상황 에서 가능 한 한 길 게 일치 하 는 것 이다.탐욕 이 아 닌 패턴 은 반대 다.
예 5: 그룹 매 칭
11> Data = "io:format(\"hello ~p~n\",[world])".
"io:format(\"hello ~p~n\",[world])"
12>
12> RE = "(.*):(.*)\s*\\((.*)\s*\\)\s*$".
"(.*):(.*) *\\((.*) *\\) *$"
13>
13> {match, [M,F,A] } = re:run(Data, RE, [{capture, [1,2,3], list}, ungreedy]).
{match,["io","format","\"hello ~p~n\",[world]"]}
14>
14> M.
"io"
15> F.
"format"
16> A.
"\"hello ~p~n\",[world]"
정규 표현 식 은 작은 괄호 로 표 시 된 그룹 을 사용 합 니 다.조별 번 호 는 왼쪽 에서 오른쪽으로 1, 2, 3...
2. 문자열 바 꾸 기
replace 원형 은 다음 과 같 습 니 다.
replace(Subject, RE, Replacement) -> iodata() | unicode:charlist()
Types:
Subject = iodata() | unicode:charlist()
RE = mp() | iodata()
Replacement = iodata() | unicode:charlist()
The same as replace(Subject,RE,Replacement,[]).
replace(Subject, RE, Replacement, Options) ->
iodata() | unicode:charlist()
Types:
Subject = iodata() | unicode:charlist()
RE = mp() | iodata() | unicode:charlist()
Replacement = iodata() | unicode:charlist()
Options = [Option]
Option = anchored
| global
| notbol
| noteol
| notempty
| notempty_atstart
| {offset, integer() >= 0}
| {newline, NLSpec}
| bsr_anycrlf
| {match_limit, integer() >= 0}
| {match_limit_recursion, integer() >= 0}
| bsr_unicode
| {return, ReturnType}
| CompileOpt
ReturnType = iodata | list | binary
CompileOpt = compile_option()
NLSpec = cr | crlf | lf | anycrlf | any
예 6: 첫 번 째 일치 하 는 문자열 바 꾸 기
17> re:replace("hello", "l", "k", [{return, list}]).
"heklo"
예 6: 일치 하 는 모든 문자열 바 꾸 기
18> re:replace("hello", "l", "k", [{return, list},global]).
"hekko"
3. 문자열 분할
split 원형 은 다음 과 같 습 니 다:
split(Subject, RE) -> SplitList
Types:
Subject = iodata() | unicode:charlist()
RE = mp() | iodata()
SplitList = [iodata() | unicode:charlist()]
The same as split(Subject,RE,[]).
split(Subject, RE, Options) -> SplitList
Types:
Subject = iodata() | unicode:charlist()
RE = mp() | iodata() | unicode:charlist()
Options = [Option]
Option = anchored
| notbol
| noteol
| notempty
| notempty_atstart
| {offset, integer() >= 0}
| {newline, nl_spec()}
| {match_limit, integer() >= 0}
| {match_limit_recursion, integer() >= 0}
| bsr_anycrlf
| bsr_unicode
| {return, ReturnType}
| {parts, NumParts}
| group
| trim
| CompileOpt
NumParts = integer() >= 0 | infinity
ReturnType = iodata | list | binary
CompileOpt = compile_option()
See compile/2 above.
SplitList = [RetData] | [GroupedRetData]
GroupedRetData = [RetData]
RetData = iodata() | unicode:charlist() | binary() | list()
예:
19> re:split("hello,world", ",", [{return, list}]).
["hello","world"]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Instalando o Elixir e o Erlang com o gerenciador de versões asdfEsse tutorial usa o gerenciador de versões asdf, mas fique a vontade para utilizar outros se preferir. Infelizmente o as...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.