我想匹配两个星号之间的所有字符串,开头或结尾都没有空格,而且我也不想只匹配星号文本。
例如:
* text* //don't match
******** //don't match
*text * //don't match
* text * //don't match
* text* //don't match
*text* //match
*Hello World !* //match
我尝试过:
(?<=\*)(?!\s)(.*?)(?!\s)(?=\*)
但是它只是在一开始就在空白处工作,如您所见:https://regex101.com/r/Hpe0br/3/
答案 0 :(得分:2)
请使用否定的字符集代替否定的环顾四周:[^\s*]
将匹配任何非空格字符或星号的字符。将其添加到起点和终点之间,就在前瞻性和前瞻性之间。另外,您可能不希望使用(.*?)
,因为.
也会与*
匹配:
(?<=\*)[^\s*](?:[^*]+[^\s*])?(?=\*)
https://regex101.com/r/Hpe0br/6
内部组(?:[^*]+[^\s*])?
是可选的,以允许单字符匹配,例如*a*
。
还请注意,如果您使用的是Javascript,则lookbehind是一项非常新的功能-没有较旧的浏览器支持它,并且不可移植。您可能会考虑匹配 *
,并捕获组中*
之间的文本:
\*([^\s*](?:[^*]+[^\s*])?)\*
所需的子字符串将位于第一个捕获的组中。