説明
この正規表現は、要求された文字列部分を要求されたグループに返します。はオプションです。and
文字列内に見つからない場合は、文字列全体がグループ 1 に配置されます。すべては\s*?
、キャプチャされたグループの空白が自動的にトリミングされるように強制します。
^\s*?\b(.*?)\b\s*?(?:\b(and)\b\s*?\b(.*?)\b\s*?)?$
グループ
0 は一致する文字列全体を取得します
- 区切り単語の前の文字列を取得します
and
。そうでないand
場合は、文字列全体がここに表示されます
- 区切りの単語を取得します。この場合は
and
- 文字列の 2 番目の部分を取得します
Java コード例:
ケース1
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Module1{
public static void main(String[] asd){
String sourcestring = "foo sentence A AND foo sentence B";
Pattern re = Pattern.compile("^\\s*?\\b(.*?)\\b\\s*?(?:\\b(and)\\b\\s*?\\b(.*?)\\b\\s*?)?$",Pattern.CASE_INSENSITIVE);
Matcher m = re.matcher(sourcestring);
if(m.find()){
for( int groupIdx = 0; groupIdx < m.groupCount()+1; groupIdx++ ){
System.out.println( "[" + groupIdx + "] = " + m.group(groupIdx));
}
}
}
}
$matches Array:
(
[0] => foo sentence A AND foo sentence B
[1] => foo sentence A
[2] => AND
[3] => foo sentence B
)
ケース 2、同じ正規表現を使用
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Module1{
public static void main(String[] asd){
String sourcestring = "foo sentence A";
Pattern re = Pattern.compile("^\\s*?\\b(.*?)\\b\\s*?(?:\\b(and)\\b\\s*?\\b(.*?)\\b\\s*?)?$",Pattern.CASE_INSENSITIVE);
Matcher m = re.matcher(sourcestring);
if(m.find()){
for( int groupIdx = 0; groupIdx < m.groupCount()+1; groupIdx++ ){
System.out.println( "[" + groupIdx + "] = " + m.group(groupIdx));
}
}
}
}
$matches Array:
(
[0] => foo sentence A
[1] => foo sentence A
)