我试图找到以特定字符开头的单词,例如:Lorem ipsum #text Second lorem ipsum.你好吗?没事了。完成了。现在还有别的事情。我需要得到所有以“#”开头的单词。所以我的预期结果是#text,#are,#else有什么想法吗
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
cpjpxq1n2#
试试这个#(\S+)\s?
#(\S+)\s?
nhn9ugyo3#
白色后或行首以#开头的单词。根据您的用法,不需要最后一个单词的边界。
/(?:^|\s)\#(\w+)\b/
括号将把你的单词放在一个组中。现在,它取决于你如何应用这个正则表达式的语言。(?:...)是非捕获组。
(?:...)
rslzwgfq4#
下面的代码应该可以解决这个问题。
/\$(\w)+/g
$
/#(\w)+/g
#
Mark Bayers给出的答案/(?<!\w)#\w+/在RegExr.com网站上给出了如下警告
RegExr.com
"(?<!" The "negative lookbehind" feature may not be supported in all browsers.
可以通过删除>将其更改为(?!\w)@\w+来修复此警告
>
(?!\w)@\w+
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切换为Cyrillic或Phoenician。上面的示例不适用于“RTL”脚本。
\w
Latin
Cyrillic
Phoenician
qf9go6mv6#
试试这个:\B\#\w+单词边界,后跟字符,再后跟一个或多个单词字符。
\B\#\w+
6条答案
按热度按时间7bsow1i61#
搜索:
试试这个:
在C#中,它看起来像这样:
输出:
cpjpxq1n2#
试试这个
#(\S+)\s?
nhn9ugyo3#
白色后或行首以#开头的单词。根据您的用法,不需要最后一个单词的边界。
括号将把你的单词放在一个组中。现在,它取决于你如何应用这个正则表达式的语言。
(?:...)
是非捕获组。rslzwgfq4#
下面的代码应该可以解决这个问题。
/\$(\w)+/g
搜索以$
开头的单词/#(\w)+/g
搜索以#
开头的单词Mark Bayers给出的答案
/(?<!\w)#\w+/
在RegExr.com
网站上给出了如下警告可以通过删除
>
将其更改为(?!\w)@\w+
来修复此警告mzmfm0qo5#
为了适应不同的语言,我有这个(PCRE/PHP):
或
或循环执行多个脚本
\w
工作得很好,但据我所知,它只适用于拉丁字母。在上述示例中,将
Latin
切换为Cyrillic
或Phoenician
。上面的示例不适用于“RTL”脚本。
qf9go6mv6#
试试这个:
\B\#\w+
单词边界,后跟字符,再后跟一个或多个单词字符。