Можно написать регулярное выражение вот так:
<option(?!\sdisabled).*?>(.*?)</option>
Здесь ищем группы (.*?)
между тегами <option></option>, при этом в самом теге могут быть какие угодно атрибуты .*?
, но не должно быть disabled (?!\sdisabled)
.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MyClass {
public static void main(String args[]) {
String s = "<option disabled=\"\" value=\"\">---</option><option value=\"2089974\">Shimano/SRAM HG 10/11-speed</option><option value=\"2089975\">SRAM XDR 11/12s</option>";
String regex = "<option(?!\sdisabled).*?>(.*?)</option>";
String result = "";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while (m.find()) {
result += m.group(1) + "|";
}
result = result.replaceAll(".$", "");
System.out.println(result);
}
}
Вывод:
Shimano/SRAM HG 10/11-speed|SRAM XDR 11/12s
В while (m.find())
забираем все группы и добавляем в result
, в качестве разделителя также добавляем "|".
Как группы заканчиваются, убираем разделитель в конце результирующей строковой переменной.