Regex查找以特定字符开头的单词

4xy9mtcn  于 2023-04-13  发布在  其他
关注(0)|答案(6)|浏览(237)

我试图找到以特定字符开头的单词,例如:
Lorem ipsum #text Second lorem ipsum.你好吗?没事了。完成了。现在还有别的事情。
我需要得到所有以“#”开头的单词。所以我的预期结果是#text,#are,#else
有什么想法吗

7bsow1i6

7bsow1i61#

搜索:

  • 不是单词字符的东西
  • 一些单词字符

试试这个:

/(?<!\w)#\w+/

在C#中,它看起来像这样:

string s = "Lorem ipsum #text Second lorem ipsum. How #are You. It's ok. Done. Something #else now.";
foreach (Match match in Regex.Matches(s, @"(?<!\w)#\w+"))
{
    Console.WriteLine(match.Value);
}

输出:

#text
#are
#else
cpjpxq1n

cpjpxq1n2#

试试这个#(\S+)\s?

nhn9ugyo

nhn9ugyo3#

白色后或行首以#开头的单词。根据您的用法,不需要最后一个单词的边界。

/(?:^|\s)\#(\w+)\b/

括号将把你的单词放在一个组中。现在,它取决于你如何应用这个正则表达式的语言。
(?:...)是非捕获组。

rslzwgfq

rslzwgfq4#

下面的代码应该可以解决这个问题。

  • /\$(\w)+/g搜索以$开头的单词
  • /#(\w)+/g搜索以#开头的单词

Mark Bayers给出的答案/(?<!\w)#\w+/RegExr.com网站上给出了如下警告

"(?<!" The "negative lookbehind" feature may not be supported in all browsers.

可以通过删除>将其更改为(?!\w)@\w+来修复此警告

mzmfm0qo

mzmfm0qo5#

为了适应不同的语言,我有这个(PCRE/PHP):

'~(?<!\p{Latin})#(\p{Latin}+)~u'

$language = 'ex. get form value';
'~(?<!\p{' . $language . '})#(\p{' . $language . '}+)~u'

或循环执行多个脚本

$languages = $languageArray;

$replacePattern = [];

foreach ($languages as $language) {

  $replacePattern[] = '~(?<!\p{' . $language . '})#(\p{' . $language . '}+)~u';

}

$replacement = '<html>$1</html>';

$replaceText = preg_replace($replacePattern, $replacement, $text);

\w工作得很好,但据我所知,它只适用于拉丁字母。
在上述示例中,将Latin切换为CyrillicPhoenician
上面的示例不适用于“RTL”脚本。

qf9go6mv

qf9go6mv6#

试试这个:\B\#\w+
单词边界,后跟字符,再后跟一个或多个单词字符。

相关问题