正则表达式多次匹配组

时间:2017-09-12 16:37:54

标签: php regex

我希望匹配所有出现的" 1x"和" 2x"与另一个非捕获组合组合(" WordX")。这是我到目前为止所做的,但它只匹配最后一次" 2x":

SparkSession spark = SparkSession.builder().config(conf).getOrCreate();
JavaPairRDD<Integer,String> rdd= new JavaSparkContext(spark.sparkContext()).parallelizePairs(
                Arrays.asList(new Tuple2[]{
                        new Tuple2<Integer,String>(1,"<xml>Stanford University is located in California. " +
                                "It is a great university.</xml>")}));
Dataset<Row> ds = spark.createDataFrame(rdd.rdd(),Type.class);
     // steps to implement nlp ?

测试字符串:

^.*(?:Word1|Word2|Word3)*(1x|2x)

https://regex101.com/r/zxfAB7/1

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

要匹配非捕获组之后出现的所有1x/2x,您可以在此处使用边界锚\G

(?:(?:Word1|Word2|Word3)+|(?<!^)\G).*?(1x|2x)

RegEx Demo

\G在上一场比赛结束或第一场比赛的字符串开头处断言位置。

答案 1 :(得分:0)

preg_match + preg_match_all 提取项目(1x2x)的解决方案{1}}发生:

Word[123]

输出:

$s = "Foo Foo Word1: bar 1x foobar 1x foo 2x bar";
$result = false;

if (preg_match('/^.*(?:Word[123]).*(1x|2x)/', $s)) {
    preg_match_all('/1x|2x/', preg_replace('/^.*Word[123]/', '', $s), $m);
    $result = $m[0];
}
print_r($result);