답변:
작은 따옴표 사이에 부분을 원한다고 가정하면 다음과 같이 정규 표현식을 사용하십시오 Matcher
.
"'(.*?)'"
예:
String mydata = "some string with 'the data i want' inside";
Pattern pattern = Pattern.compile("'(.*?)'");
Matcher matcher = pattern.matcher(mydata);
if (matcher.find())
{
System.out.println(matcher.group(1));
}
결과:
내가 원하는 데이터
this 'is' my 'data' with quotes
일찍 중지하고 반환 하므로 기본 동작입니다. is
is' my 'data
이를 위해 정규식이 필요하지 않습니다.
프로젝트에 Apache Commons lang을 추가 한 후 ( http://commons.apache.org/proper/commons-lang/ ) 다음을 사용하십시오.
String dataYouWant = StringUtils.substringBetween(mydata, "'");
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
Pattern pattern = Pattern.compile(".*'([^']*)'.*");
String mydata = "some string with 'the data i want' inside";
Matcher matcher = pattern.matcher(mydata);
if(matcher.matches()) {
System.out.println(matcher.group(1));
}
}
}
여러 인용 된 문자열을 쉽게 처리하는 정규 표현식이없는 솔루션 인 Scala를 선택했기 때문에 :
val text = "some string with 'the data i want' inside 'and even more data'"
text.split("'").zipWithIndex.filter(_._2 % 2 != 0).map(_._1)
res: Array[java.lang.String] = Array(the data i want, and even more data)
.split('\'').get(2)
Java에서 그 정도 또는 그 정도가 아닌 이유는 무엇 입니까? 나는 그것이 읽을 수있는 해결책이라고 생각하면 뇌 스캔을 받아야 할 수도 있다고 생각합니다. 누군가가 나에게 코드 골프를하려고하는 것처럼 보입니다.
스칼라에서
val ticks = "'([^']*)'".r
ticks findFirstIn mydata match {
case Some(ticks(inside)) => println(inside)
case _ => println("nothing")
}
for (ticks(inside) <- ticks findAllIn mydata) println(inside) // multiple matches
val Some(ticks(inside)) = ticks findFirstIn mydata // may throw exception
val ticks = ".*'([^']*)'.*".r
val ticks(inside) = mydata // safe, shorter, only gets the first set of ticks
Apache Commons Lang은 java.lang API를위한 다양한 도우미 유틸리티, 특히 문자열 조작 방법을 제공합니다. 귀하의 경우 시작 부분 문자열과 끝 부분 문자열이 동일하므로 다음 함수를 호출하십시오.
StringUtils.substringBetween(String str, String tag)
동일한 String의 두 인스턴스 사이에 중첩 된 String을 가져옵니다 .
시작 부분 문자열과 끝 부분 문자열이 다른 경우 다음 오버로드 된 메소드를 사용하십시오.
StringUtils.substringBetween(String str, String open, String close)
두 문자열 사이에 중첩 된 문자열을 가져옵니다.
일치하는 부분 문자열의 모든 인스턴스를 원하면
StringUtils.substringsBetween(String str, String open, String close)
시작 및 종료 태그로 구분 된 하위 문자열을 문자열에서 검색하여 배열에서 일치하는 모든 하위 문자열을 반환합니다 .
해당 예제에서 일치하는 부분 문자열의 모든 인스턴스를 가져 오려면
String[] results = StringUtils.substringsBetween(mydata, "'", "'");
이것을 사용하면 while 루프를 사용하여 배열에 모든 일치 하위 문자열을 저장합니다.
if (matcher.find())
{
System.out.println(matcher.group(1));
}
당신은 일치하는 부분 문자열을 얻을 것이다 그래서 당신은 모든 일치하는 부분 문자열을 얻을 수 있습니다
Matcher m = Pattern.compile("[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+").matcher(text);
// Matcher mat = pattern.matcher(text);
ArrayList<String>matchesEmail = new ArrayList<>();
while (m.find()){
String s = m.group();
if(!matchesEmail.contains(s))
matchesEmail.add(s);
}
Log.d(TAG, "emails: "+matchesEmail);