/(.+?)\s(A|C)/

/(.+?)\s(A|C)/

/(.+?)\s(A|C)/  帮我看看第一个括号的匹配的项,没太明白,  .是非\n 的单个字符  后面怎么有两个数目修饰符 + 和?


例如D000009        A02.633.567.050
对应的$1是D000009  $2是A
No-Greedy Quantifier
+?表示的是非贪婪匹配
/(.+?)\s(A|C)/
楼上两位说得很清楚了,?表示前面的量词是懒惰模式的,即,只要匹配实现,不求最大,立即退出。

针对本正则式来说,.+?表示的是任意多(n>1)个任意字符(不包括换行符),紧接着是一个空白字符(空格或\t或其它),最后是A或C。
同时在本例中,+?的意义其实没体现出来。我们换一个例子,您就会一目了然。

例2
正则式:/(.+)\s(A|C)/ 注意少了?号。
字串newstring:'D000009        A02.633.567.050 C',
在此例中,$1='D000009        A02.633.567.050 ', $2='C';

因为例2匹配过程是贪婪的,(.+)先整个字串掉,之后再回退一个字母,用来匹配A或C。
如果仍使用/(.+?)\s(A|C)/来匹配newstring的话,仍然是$1='D000009        ',$2='A',因为它在匹配时比较谨慎,不是一下子先读入所有的字串,而是当前匹配条件满足之后,立即照顾下一条规则。

我自认为自己明白了,只是不确认是不是表述清楚了,您是否清楚了或是更不清楚了。期待您的反馈。
基本上明白了,谢谢你们了
类似与* 和 *?的区别:贪婪和非贪婪的区别