www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Where do you test syntax of D regexp online?

reply Suliman <evermind live.ru> writes:
I wrote two regexp:

--------------------
auto inlineCodeBlock = regex("`(.*?)`"); // -->  `(.*?)`
auto bigCodeBlock = regex("/`{3}[\\s\\S]*?`{3}/g"); // -->  
`{3}[\s\S]*?`{3}
--------------------
First for for selection inline code block. Second for multi-line:
--------------------
#Header
my header text


my sub header text `foo inline code`

```
void foo()
{
    writeln("ppp");
}
```


my sub 3 text `bar inline code`

#Header2
my header2 text
--------------------

It's work fine in online editor https://regex101.com/r/EC5WRu/1 
(sic! \\s\\S double escaped in D code).

But after compilation of code:

auto x = content.matchFirst(bigCodeBlock);
writeln(x);


print:
[]
[]

It's seems that D regexp work in another way. How can I test them?
Mar 09 2017
parent reply rikki cattermole <rikki cattermole.co.nz> writes:
On 10/03/2017 3:50 AM, Suliman wrote:
 I wrote two regexp:

 --------------------
 auto inlineCodeBlock = regex("`(.*?)`"); // -->  `(.*?)`
 auto bigCodeBlock = regex("/`{3}[\\s\\S]*?`{3}/g"); // -->
 `{3}[\s\S]*?`{3}
 --------------------
 First for for selection inline code block. Second for multi-line:
 --------------------
 #Header
 my header text


 my sub header text `foo inline code`

 ```
 void foo()
 {
    writeln("ppp");
 }
 ```


 my sub 3 text `bar inline code`

 #Header2
 my header2 text
 --------------------

 It's work fine in online editor https://regex101.com/r/EC5WRu/1 (sic!
 \\s\\S double escaped in D code).

 But after compilation of code:

 auto x = content.matchFirst(bigCodeBlock);
 writeln(x);


 print:
 []
 []

 It's seems that D regexp work in another way. How can I test them?
I would use dpaste and write a quick script but here is where I think your problem is: regex("/.*/g") It should be: regex(".*", "g") As per[0].
Mar 09 2017
parent reply Suliman <evermind live.ru> writes:
 I would use dpaste and write a quick script but here is where I 
 think your problem is:

 regex("/.*/g")

 It should be:

 regex(".*", "g")

 As per[0].


Sorry, but what regexp are you talking? There is nothing like: `regex("/.*/g")` in my code...
Mar 09 2017
parent reply rikki cattermole <rikki cattermole.co.nz> writes:
On 10/03/2017 4:17 AM, Suliman wrote:
 I would use dpaste and write a quick script but here is where I think
 your problem is:

 regex("/.*/g")

 It should be:

 regex(".*", "g")

 As per[0].


Sorry, but what regexp are you talking? There is nothing like: `regex("/.*/g")` in my code...
Yes there was: auto bigCodeBlock = regex("/`{3}[\\s\\S]*?`{3}/g");
Mar 09 2017
parent reply Suliman <evermind live.ru> writes:
On Thursday, 9 March 2017 at 15:22:00 UTC, rikki cattermole wrote:
 On 10/03/2017 4:17 AM, Suliman wrote:
 I would use dpaste and write a quick script but here is where 
 I think
 your problem is:

 regex("/.*/g")

 It should be:

 regex(".*", "g")

 As per[0].


Sorry, but what regexp are you talking? There is nothing like: `regex("/.*/g")` in my code...
Yes there was: auto bigCodeBlock = regex("/`{3}[\\s\\S]*?`{3}/g");
I still can't get it work in real code :(
Mar 09 2017
parent reply Suliman <evermind live.ru> writes:
Adding "r" helped:

auto bigCodeBlock = regex(r"`{3}[\s\S]*?`{3}");

But now output is:
[["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]]

But I do not \r\n\ symbols...
Mar 09 2017
next sibling parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Thursday, 9 March 2017 at 16:14:28 UTC, Suliman wrote:
 But now output is:
 [["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]]

 But I do not \r\n\ symbols...
That's just the writeln array formatter. The matchFirst function returns an array of hits (that allows captures, btw you might need to use \( instead of ( to get the capture, god i hate regex) so writeln tries to print the whole array and that's how it does embedded newlines. So you have the correct result, just written strangely.
Mar 09 2017
parent reply Suliman <evermind live.ru> writes:
On Thursday, 9 March 2017 at 16:23:23 UTC, Adam D. Ruppe wrote:
 On Thursday, 9 March 2017 at 16:14:28 UTC, Suliman wrote:
 But now output is:
 [["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]]

 But I do not \r\n\ symbols...
That's just the writeln array formatter. The matchFirst function returns an array of hits (that allows captures, btw you might need to use \( instead of ( to get the capture, god i hate regex) so writeln tries to print the whole array and that's how it does embedded newlines. So you have the correct result, just written strangely.
How should I write to file result without \r\n\ symbols? auto x = content.matchFirst(bigCodeBlock); File f = File("foo.txt", "w"); f.write(x); foo.txt: ["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]
Mar 09 2017
parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Thursday, 9 March 2017 at 16:40:13 UTC, Suliman wrote:
 How should I write to file result without \r\n\ symbols?

 auto x = content.matchFirst(bigCodeBlock);

 File f = File("foo.txt", "w");
 f.write(x);
Just f.write(x[0]); to write out the whole hit instead of the collection of references.
Mar 09 2017
parent reply Suliman <evermind live.ru> writes:
On Thursday, 9 March 2017 at 16:47:18 UTC, Adam D. Ruppe wrote:
 On Thursday, 9 March 2017 at 16:40:13 UTC, Suliman wrote:
 How should I write to file result without \r\n\ symbols?

 auto x = content.matchFirst(bigCodeBlock);

 File f = File("foo.txt", "w");
 f.write(x);
Just f.write(x[0]); to write out the whole hit instead of the collection of references.
What can be wrong with this regexp? https://regex101.com/r/8e7nPL/3 it's crush D compiler, and I can't find out why
Mar 10 2017
parent Suliman <evermind live.ru> writes:
On Friday, 10 March 2017 at 14:36:48 UTC, Suliman wrote:
 On Thursday, 9 March 2017 at 16:47:18 UTC, Adam D. Ruppe wrote:
 On Thursday, 9 March 2017 at 16:40:13 UTC, Suliman wrote:
 How should I write to file result without \r\n\ symbols?

 auto x = content.matchFirst(bigCodeBlock);

 File f = File("foo.txt", "w");
 f.write(x);
Just f.write(x[0]); to write out the whole hit instead of the collection of references.
What can be wrong with this regexp? https://regex101.com/r/8e7nPL/3 it's crush D compiler, and I can't find out why
like: #header some text and some code ^ first matching #header2 some text2 and some code2 ^ second matching
Mar 10 2017
prev sibling parent rikki cattermole <rikki cattermole.co.nz> writes:
On 10/03/2017 5:14 AM, Suliman wrote:
 Adding "r" helped:

 auto bigCodeBlock = regex(r"`{3}[\s\S]*?`{3}");

 But now output is:
 [["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]]

 But I do not \r\n\ symbols...
\r\n is Windows new line characters.
Mar 09 2017